简单排序题,在处理上有些小技巧
- 先进行排序
- 计算出有几张王,因为王是任意牌,如果排序后除王外有重复的,则返回false。
- 如果最大值减去最小值小于5,return true
class Solution {
public boolean isStraight(int[] nums) {
//判断有无大小王 和是否有A
int joker = 0;
quicksort(nums,0,4);
for(int i = 0;i < 4;i++){
if(nums[i] == 0) joker++;
if(nums[i] == nums[i+1] && nums[i] != 0) return false;
}
if(nums[4] - nums[joker] < 5)return true;
else return false;
}
public void quicksort(int[] arr,int low,int high){
if(low < high){
int index = partition(arr,low,high);
quicksort(arr,index + 1,high);
quicksort(arr,low,index - 1);
}
}
public int partition(int[] arr,int low,int high){
int i = low;
int j = high;
int x = arr[i];
while(i < j){
while(i < j && x <= arr[j]){
j--;
}
if(i < j)arr[i] = arr[j];
while(i < j && x >= arr[i]){
i++;
}
if(i < j)arr[j] = arr[i];
}
arr[i] = x;
return i;
}
}



