860. 柠檬水找零(简单)
class Solution {
public boolean lemonadeChange(int[] bills) {
int cash[] = new int[21];
for(int i=0;i<bills.length;i++){
cash[bills[i]]++;
int diff = bills[i]-5;
if(diff==5){
if(cash[5]<=0)return false;
cash[5]--;
}
else if(diff==15){
if(cash[5]>0&&cash[10]>0){
cash[5]--;
cash[10]--;
}else if(cash[5]>=3){
cash[5]-=3;
}else return false;
}
}
return true;
}
}
406. 根据身高重建队列(中等)
// 思路:先按照身高从高到低排序,身高相同时选择属性低的往前排,然后把身高矮的有属性需求的往前移动
// 身高矮的往前移是不会影响高的人的属性值
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people,(a,b)->{
if(a[0]!=b[0])return b[0]-a[0];
else return a[1]-b[1];
});
for(int i=0;i<people.length;i++){
int h = people[i][0];
int k = people[i][1];
if(k>=i)continue;
for(int j = i;j>k;j--){
people[j][0] = people[j-1][0];
people[j][1] = people[j-1][1];
}
people[k][0] = h;
people[k][1] = k;
}
return people;
}
}
452. 用最少数量的箭引爆气球(中等)
存在问题:对数组排序的时候,注意(a,b)-> a[1]-b[1] 这种写法,会造成int溢出,尽量写成omparator.comparingInt(a -> a[1])
// 思路:按照Xend排序,每一支箭可以解决的范围是当一个序列的起始元素Xstart[1]>=Xend[0]
class Solution {
public int findMinArrowShots(int[][] points) {
int cnt = 1;
Arrays.sort(points, Comparator.comparingInt(a -> a[1]));
int end = points[0][1];
for(int i=1;i<points.length;i++){
if(points[i][0]>end){
cnt++;
end = points[i][1];
}
}
return cnt;
}
}