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:
标签:cnt,medium,int,fruits,else,cntlx,ans,成篮,LeetCode From: https://blog.51cto.com/u_15684947/5785888