劍指offer --撲克牌順序
阿新 • • 發佈:2018-11-05
題目描述
LL今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王(一副牌原本是54張_)…他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!“紅心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是順子…LL不高興了,他想了想,決定大\小 王可以看成任何數字,並且A看作1,J為11,Q為12,K為13。上面的5張牌就可以變成“1,2,3,4,5”(大小王分別看作2和4),“So Lucky!”。LL決定去買體育彩票啦。 現在,要求你使用這幅牌模擬上面的過程,然後告訴我們LL的運氣如何, 如果牌能組成順子就輸出true,否則就輸出false。為了方便起見,你可以認為大小王是0。
解題思路
- 對陣列排序
- 計算陣列中 0 的個數
- 計算缺少的差值
0 的個數大於等於差值,那就代表可以排序
AC程式碼
思路要清晰,寫程式碼要快準狠。
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers == null || numbers.length == 0) return false; // 1
Arrays.sort(numbers);
int numsOfZero = 0;
int gaps = 0;
for(int i = 0;i < numbers.length;i++){
if(i != 0 && numbers[i] != 0 && numbers[i - 1] == numbers[i]) return false; // 2,可以連續兩個 0
if(i != 0 && numbers[i - 1] != 0 && numbers[i] - numbers[i - 1] != 1) gaps += numbers[i] - numbers[i - 1] - 1; // 3
if(numbers[i] == 0) numsOfZero++;
}
if(gaps <= numsOfZero) return true; // 4
return false;
}
}