程式碼隨想錄演算法訓練營 | 122.買賣股票的最佳時機II,55. 跳躍遊戲,45.跳躍遊戲II,1005.K次取反後最大化的陣列和

漪欢酒發表於2024-10-03

122.買賣股票的最佳時機II
題目連結:122.買賣股票的最佳時機II
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰買賣股票的最佳時機II
日期:2024-10-03

想法:本來還在想什麼時候買股票,結果只需要考慮每天的正收益累加就是最大的收益了。
Java程式碼如下:

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for(int i = 1; i < prices.length; i++) {
            res += Math.max((prices[i] - prices[i - 1]), 0);
        }
        return res;
    }
}

55. 跳躍遊戲
題目連結:55. 跳躍遊戲
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰跳躍遊戲
日期:2024-10-03

想法:用i + nums[i]得到最大的可跳躍範圍cover,在可跳躍範圍裡找更大的範圍,直到能包含終點。
Java程式碼如下:

class Solution {
    public boolean canJump(int[] nums) {
        int cover = 0;
        for(int i = 0; i <= cover; i++) {
            cover = Math.max(i + nums[i], cover);
            if(cover >= nums.length - 1) return true;
        }
        return false;
    }
}

45.跳躍遊戲II
題目連結:45.跳躍遊戲II
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰跳躍遊戲II
日期:2024-10-03

想法:記錄當前這一步能跳的範圍和下一步的範圍,當走到當前這一步盡頭時沒能到終點,步數加一,進入下一步。
Java程式碼如下:

class Solution {
    public int jump(int[] nums) {
        int count = 0;
        int cur = 0;
        int next = 0;
        for(int i = 0; i < nums.length; i++) {
            next = Math.max(i + nums[i], next);
            if(i == cur) {
                count++;
                cur = next;
                if(next >= nums.length - 1) break;
            }
        }
        return count;
    }
}

1005.K次取反後最大化的陣列和
題目連結:1005.K次取反後最大化的陣列和
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰K次取反後最大化的陣列和
日期:2024-10-03

想法:排序陣列,負數反轉,如果負數不夠就根據剩下的次數,為奇數則再次排列翻轉最小的,為偶數則不變。
Java程式碼如下:

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        for(int i = 0; i < nums.length && k > 0; i++) {
            if(nums[i] < 0) {
                nums[i] = -nums[i];
                k--;
            }
        }
        if(k % 2 == 1) {
            Arrays.sort(nums);
            nums[0] = -nums[0];
        }
        int sum = 0;
        for(int num : nums) {
            sum += num;
        }
        return sum;
    }
}

相關文章