881. 救生艇

2021-08-28  本文已影响0人  漫行者_

881. 救生艇

本题一开始理解错题目了。理解成,小船不限制成坐数量
思路一开始想的是:

public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < people.length; i++) {
            list.add(people[i]);
        }
        int num = 0;
        while (!list.isEmpty()) {
            int h = list.get(list.size() - 1);
            int i = 0;
            for (; i < list.size() - 1 && h + list.get(i) <= limit; i++) {
                h += list.get(i);
            }
            num++;
            for (int j = 0; j < i; j++) {
                list.remove(0);
            }
            list.remove(list.size()-1);
        }
        return num;
    }

然后按照题目要求两个最多:

public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < people.length; i++) {
            list.add(people[i]);
        }
        int num = 0;
        while (!list.isEmpty()) {
            int h = list.get(list.size() - 1);
            int i = 0;
            if (i < list.size() - 1 && h + list.get(i) <= limit) {
                h += list.get(i);
                i++;
            }
            num++;
            for (int j = 0; j < i; j++) {
                list.remove(0);
            }
            list.remove(list.size()-1);
        }
        return num;
    }

用双指针来做:

    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int i = 0;
        int l = people.length - 1;
        int num = 0;
        while(i <= l) {
            if(people[i] + people[l] > limit) {
                l--;
            } else {
                i++;
                l--;
            }
            num++;
        }
        return num;
    }

证明感觉很难

上一篇 下一篇

猜你喜欢

热点阅读