class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
int buy1 = -prices[0], sell1 = 0;
int buy2 = -prices[0], sell2 = 0;
for (int i = 1; i < n; ++i) {
buy1 = Math.max(buy1, -prices[i]);
sell1 = Math.max(sell1, buy1 + prices[i]);
buy2 = Math.max(buy2, sell1 - prices[i]);
sell2 = Math.max(sell2, buy2 + prices[i]);
}
return sell2;
}
}
系列题解:https://leetcode.cn/circle/discuss/qiAgHn/
public class MaxSlidingWindow {
// 239. 滑动窗口最大值
public int[] maxSlidingWindow(int[] nums, int k) {
int[] res = new int[nums.length - k + 1];
LinkedList<Integer> queue = new LinkedList<>();
for(int right = 0; right < nums.length; right++) {
while (!queue.isEmpty() && nums[right] >= nums[queue.getLast()]) {
queue.removeLast();
}
queue.addLast(right);
int left = right - k +1;
if (queue.getFirst() < left) {
queue.removeFirst();
}
if (right +1 >= k) {
res[left] = nums[queue.getFirst()];
}
}
return res;
}
}
class Solution {
public int result = 0;
public int findTargetSumWays(int[] nums, int target) {
backTrack(nums,0,target);
return result;
}
public void backTrack(int[] nums,int begin,int target){
if(begin == nums.length){
result=result + (target==0? 1:0);
return ;
}
backTrack(nums,begin+1,target-nums[begin]);
backTrack(nums,begin+1,target+nums[begin]);
}
}