1、 

【LeetCode 904-medium】水果成篮_junit

这题做法多种多样,看能不能找到五种做法。 

其实就是这道题:


 力扣题我的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: