第一題:
原題鏈接:122. 買賣股票的最佳時機 II - 力扣(LeetCode)
思路:
這題十分簡單,就是把相鄰天數的金額相減,如果發現大于0就加到res中,返回res即可
代碼如下:
class Solution {
public:int maxProfit(vector<int>& prices) {int res = 0;for(int i = 1; i < prices.size(); i++){int profit = prices[i] - prices[i - 1];if(profit > 0) res += profit; }return res;}
};
第二題:
原題鏈接:55. 跳躍游戲 - 力扣(LeetCode)
思路:
看數組中每一位是否能覆蓋到整個數組,如果覆蓋到返回true;
代碼如下:
class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;if(nums.size() == 0) return true;for(int i = 0; i <= cover; i++){cover = max(cover, nums[i] + i);if(cover >= nums.size() - 1) return true;}return false;}
};
第三題:
原題鏈接:45. 跳躍游戲 II - 力扣(LeetCode)
思路:
當前可以移動距離盡可能的走遠,當走到最遠的時候還沒到達終點的時候,步數加一同時更新下一步的最遠距離。一旦覆蓋了終點,得到的就是最遠步數。
我們需要兩個變量一個是這一步的最大覆蓋距離,另一個是下一步覆蓋的最遠距離。
代碼如下:
class Solution {
public:int jump(vector<int>& nums) {int cur = 0, next = 0, res = 0;if(nums.size() == 1) return 0;for(int i = 0; i < nums.size(); i++){next = max(next, nums[i] + i);if(cur == i){cur = next;res++;if(cur >= nums.size() - 1){break;}}}return res;}
};
第四題:
原題鏈接:1005. K 次取反后最大化的數組和 - 力扣(LeetCode)
思路:
先排序,遍歷數組,將數組中為負的元素全部取正。
如果此時K的值不為0且為奇數,再進行排序,將最小的元素取反。
最后累加和。
代碼如下:
class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end());for(int i = 0; i < nums.size() && k > 0; i++){if(nums[i] < 0) {nums[i] = -nums[i];k--;}}sort(nums.begin(), nums.end());if(k > 0){if(k % 2 == 1){nums[0] = -nums[0];}}int res = 0;for(int i = 0; i < nums.size(); i++){res += nums[i];}return res;}
};