思路:这题可难了,看了评论区大神的答案。用到了堆排序的使用。建议背会吧。
堆:本质是个优先级队列。
构造方法:
PriorityQueue():创建一个默认的初始容量PriorityQueue(11),命令其元素按其自然排序(从小到大,默认出来就是小根堆)
PriorityQueue(int initialCapacity):创建一个具有指定的初始容量,命令其元素按其自然排序PriorityQueue。...
public String minNumber(int[] nums) {
PriorityQueue<String> pq = new PriorityQueue<>((a,b)->{
return new String(a+b).compareTo(b+a);
});
for (int i : nums){
pq.add(String.valueOf(nums[i]));
}
StringBuilder res = new StringBuilder();
while (!pq.isEmpty()){
res.append(pq.poll());
}
return res.toString();
}
思路:当前后元素差值不为1时,就需要用0补齐。计算所有元素的差值dist,以及0的个数zeroCount。当zeroCount>=dist时即返回true..
public boolean isStraight(int[] nums) {
Arrays.sort(nums);
int zeroCount=0,dist=0;
for (int i=0;i<nums.length;i++){
if (nums[i]== 0)
zeroCount++;
}
for (int i=0;i<nums.length-1;i++){
if (nums[i]==nums[i+1])
return false;
else
dist += nums[i+1]-nums[i]-1;
}
return zeroCount>=dist;
}
文章介绍了两个算法问题的解法,一个是使用堆排序将整数数组排列成最小的数,通过PriorityQueue实现字符串比较;另一个是判断扑克牌数组是否构成顺子,通过计算差值和0的个数来确定。
385

被折叠的 条评论
为什么被折叠?



