第 202 场力扣周赛题解

好久没进前50了,菜啊。

第 202 场力扣周赛题解_第1张图片

5185. 存在连续三个奇数的数组

思路:直接遍历计数就OK了。

class Solution {
    public boolean threeConsecutiveOdds(int[] arr) {

        int num=0;
        for(int i=0;i=3)
                return true;
        }
        
        return false;
    }
}

5488. 使数组中所有元素相等的最小操作数

思路:肯定是都变成中位数是最优的。

class Solution {
    public int minOperations(int n) {

        int ans = 0;

        int l = 0, r = n - 1;
        while (l <= r) {
            ans += n - (2 * l + 1);
            l++;
            r--;
        }

        return ans;
    }
}

5489. 两球之间的磁力

思路:二分答案,直接看二分的间隔能否放下m个即可。

class Solution {
    public int maxDistance(int[] position, int m) {

        Arrays.sort(position);

        int ans = 0, l = 0, r = 1000000000;
        while (l <= r) {
            int mid = (l + r) / 2;
            if (check(position, m, mid)) {
                ans = mid;
                l = mid + 1;
            } else
                r = mid - 1;
        }

        return ans;

    }

    private boolean check(int[] arr, int m, int d) {

        int last = -d - 1, num = 0;
        int len = arr.length;
        for (int i = 0; i < len; i++) {
            if (arr[i] - last >= d) {
                num++;
                last = arr[i];
            }
        }

        return num >= m;

    }
}

5490. 吃掉 N 个橘子的最少天数

思路:记忆化搜索,直接看代码吧,没难度的。

class Solution {

    int ans;
    Map map;

    public int minDays(int n) {

        ans = n;
        map = new HashMap<>();

        return dfs(n);

    }

    private int dfs(int x) {

        if (x <= 2) return x;

        if (map.containsKey(x))
            return map.get(x);

        int res = Integer.MAX_VALUE;
        if (x % 2 == 0) {
            res = Math.min(res, dfs(x - x / 2) + 1);
            if ((x % 3 == 0)) res = Math.min(res, dfs(x - 2 * (x / 3)) + 1);
            if ((x - 1) % 3 == 0) res = Math.min(res, dfs((x - 1) - 2 * ((x - 1) / 3)) + 2);
            if ((x - 2) % 3 == 0) res = Math.min(res, dfs((x - 2) - 2 * ((x - 2) / 3)) + 3);
        } else if (x % 3 == 0) {
            res = Math.min(res, dfs(x - 2 * (x / 3)) + 1);
            if ((x % 2 == 0)) res = Math.min(res, dfs(x - x / 2) + 1);
            if ((x - 1) % 2 == 0) res = Math.min(res, dfs((x - 1) - (x - 1) / 2) + 2);
        } else {
            if ((x - 1) % 2 == 0) res = Math.min(res, dfs((x - 1) - (x - 1) / 2) + 2);
            if ((x - 1) % 3 == 0) res = Math.min(res, dfs((x - 1) - 2 * ((x - 1) / 3)) + 2);
            if ((x - 2) % 3 == 0) res = Math.min(res, dfs((x - 2) - 2 * ((x - 2) / 3)) + 3);
        }

        map.put(x, res);

        return res;
    }
}

 

你可能感兴趣的:(第 202 场力扣周赛题解)