江苏建设厅网站电话多少,淮南发布app下载,专做老酒的网站,品牌网站设计制作价格文章目录题目描述思路 代码二刷题目描述
感觉算比较有意思的简单题了#xff0c;耗了不少时间优化
思路 代码
这次注释写得比较详细#xff0c;直接看注释吧#xff5e;
class Solution {public boolean isStraight(int[] nums) {// O(n) O(n)…
文章目录题目描述思路 代码二刷题目描述
感觉算比较有意思的简单题了耗了不少时间优化
思路 代码
这次注释写得比较详细直接看注释吧
class Solution {public boolean isStraight(int[] nums) {// O(n) O(n)哈希表SetInteger hashset new HashSet();int max -1, min 14;for(int num : nums){// 0 不参与比较if(num 0){continue;}// 重复情况直接 falseif(hashset.contains(num)){return false;}// 维护 max min sethashset.add(num);max Math.max(max, num);min Math.min(min, num);}// “无重复”并且 max - min 5则一定顺子用 min max 固定首尾// a. 1 2 3 4 5// b. 0 0 1 2 5固定 1 5由于无重复其他3个元素在中间刚好填了连续 1 xxx 5// c. 0 0 3 4 5固定 3 5同上不过此处为 xx 3 x 5return max - min 5;}
}二刷
呃确实忘了最优写法了但是总体复杂度不变的写法逐个维护跑一遍五个数字没有的用0来替。
class Solution {public boolean isStraight(int[] nums) {int min Integer.MAX_VALUE;int counts 0;SetInteger set new HashSet(); for(int num : nums) {if(num 0) {counts;}else {set.add(num);min Math.min(num, min);}}for(int i min; i min 4; i) {if(!set.contains(i)) {if(counts 0) {counts--;}else {return false;}}}return true;}
}最优写法利用了各种条件见之前的注释
class Solution {public boolean isStraight(int[] nums) {int min 14, max -1;SetInteger set new HashSet();for(int num : nums) {if(num 0) {continue;}if(set.contains(num)) {return false;}else {set.add(num);min Math.min(min, num);max Math.max(max, num);}}return max - min 5;}
}