LeetCode-0620

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;
    }
}

你可能感兴趣的:(LeetCode,leetcode,算法)