文章目录
- ● 860.柠檬水找零
- 思路:
- 代码:
- ● 406.根据身高重建队列
- 思路:
- 代码:
- ● 452. 用最少数量的箭引爆气球
- 思路:
- 代码:每次更新右边界
● 860.柠檬水找零
思路:
代码:
可以最后再判断five是正还是负
class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0;
int ten = 0;
for (int i = 0; i < bills.length; i++) {
if (bills[i] == 5) {
five++;
} else if (bills[i] == 10) {
five--;
ten++;
} else if (bills[i] == 20) {
if (ten > 0) {
ten--;
five--;
} else {
five -= 3;
}
}
if (five < 0) return false;
}
return true;
}
}
● 406.根据身高重建队列
思路:
代码:
class Solution {
public int[][] reconstructQueue(int[][] people) {
// 身高从大到小排(身高相同k小的站前面)
Arrays.sort(people, (a, b) -> {
if (a[0] == b[0]) return a[1] - b[1]; // a - b 是升序排列,故在a[0] == b[0]的狀況下,會根據k值升序排列
return b[0] - a[0]; //b - a 是降序排列,在a[0] != b[0],的狀況會根據h值降序排列
});
LinkedList<int[]> que = new LinkedList<>();
for (int[] p : people) {// 特殊循环
que.add(p[1],p); //Linkedlist.add(index, value),會將value插入到指定index裡。
}
return que.toArray(new int[people.length][]);//转换数组类型
}
}
● 452. 用最少数量的箭引爆气球
思路:
代码:每次更新右边界
class Solution {
public int findMinArrowShots(int[][] points) {
// Arrays.sort(points,(a,b)->a[0]-b[0]);//按x轴坐标排序数组,但是会有溢出
// 使用Integer内置比较方法,不会溢出
Arrays.sort(points,(a,b)->Integer.compare(a[0],b[0]));
int ans=1;//初始化为1
// int start=0;
for(int i=1;i<points.length;i++){
//自己写的代码右边界处理的不对,
//因为可能其他的边界比初始的右边界还要小,比如(1,6)(2,4),
//所以应该进行更新
// if(points[i][0]>points[start][1]){
// ans++;
// start=i;
// }
if(points[i][0]>points[i-1][1]){
ans++;
}else{//<=更新边界
points[i][1]=Math.min(points[i-1][1],points[i][1]);
}
}
return ans;
}
}