1、
这题做法多种多样,看能不能找到五种做法。
其实就是这道题:
力扣
力扣题我的AC代码:(法1:边遍历边维护答案,如果遇到f[i]是第三个数就抛弃 除了f[i-1]的另一个数)
class Solution {
public:int totalFruit(vector<int>& fruits) {int ans = 1;int a = fruits[0], b = -1;int cntlx = 1, cnt = 1;for(int i = 1; i<fruits.size(); i++) {if(fruits[i] == a || fruits[i] == b) {cnt++;ans = max(ans, cnt);if(fruits[i] == fruits[i-1]) cntlx++;else cntlx = 1;}else {if(fruits[i-1] == a) {b = fruits[i];} else a = fruits[i];cnt = cntlx + 1;cntlx = 1;ans = max(ans, cnt);}}return ans;}
};
思路2:(法2:尺取法)
就正常的尺取法。用哈希表维护(或者map)
思路3:(法3:区间最大值和区间最小值)
指定左端点i,二分右端点j,看最大值和最小值是否是f[i]和f[i+1]。复杂度O(nlogn)
思路4: