0
点赞
收藏
分享

微信扫一扫

什么是工业级物联网智能网关?如何远程控制PLC?

Aliven888 04-10 08:00 阅读 2

860.柠檬水找零

这是一个模拟题,但也有贪心思想:5块更通用,所以20的时候优先用10块。

三种情况:

- 5块:直接fiveCount++;
- 10块:先看5块够不够,够的话5块--10块++;
- 20块:先看10块够不够,够的话再看5块够不够;

		- 不够看有没有三个5块。
class Solution {
        public boolean lemonadeChange(int[] bills) {
            int fiveCount = 0;
            int tenCount = 0;
            for (int bill : bills) {
                if(bill == 5){
                    fiveCount++;
                }else if(bill == 10){
                    if(fiveCount <= 0){
                        return false;
                    }
                    fiveCount--;
                    tenCount++;
                }else if(bill == 20){
                    if(tenCount > 0){
                        if(fiveCount <= 0){
                            return false;
                        }
                        tenCount--;
                        fiveCount--;
                    }else{
                        if(fiveCount <= 2){
                            return false;
                        }
                        fiveCount--;
                        fiveCount--;
                        fiveCount--;
                    }
                }
            }
            return true;
        }
    }

406. 根据身高重建队列

先根据身高将序排序,相同身高的按照a[1]升序

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][2]);
    }
}
  • 使用Arrays.sort配合lambda表达式,->左边是变量, 大括号里写判断函数
  • 用LinkedList因为要频繁插入元素,效率高

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性

全局最优:最后都做完插入操作,整个队列满足题目队列属性

452. 用最小数量的箭引爆气球

表面上看是打气球, 实际上是一个重叠子区间问题,用多少🗡️就是求有多少个不重叠的子区间(因为重叠的部分都可以被一只🗡️打到)

class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points, Comparator.comparingInt(a -> a[1]));
        int count = 1;
        int x_end = points[0][1];
        for(int[] point : points){
            if(point[0] > x_end){//这里的等于号去掉
                count++;
                x_end = point[1];
            }
        }
        return count;


    }
}
  • 又出现了Arrays.sort!!!
举报

相关推荐

0 条评论