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