978. 最长湍流子数组
dp[0][0] = dp[0][1] = 1;初始化一个数
for(int i = 1; i < n; i++) {
dp[i][0] = dp[i][1] = 1;
if(arr[i] > arr[i - 1]) {
dp[i][0] = dp[i - 1][1] + 1;交替么
}
else if(arr[i] < arr[i - 1]) {
dp[i][1] = dp[i - 1][0] + 1;
}
}
923. 三数之和的多种可能
for(int i = 0; i < arr.length; i++) {
int j = i + 1, k = arr.length - 1;开始双指针
int T = target - arr[i];剩下求两数和
while(j < k) {
if(arr[j] + arr[k] < T) {
j++;
}
else if(arr[j] + arr[k] > T) {
k--;
}
else if(arr[j] != arr[k]) {
int left = 1, right = 1;
while(j + 1 < k && arr[j] == arr[j + 1]) {
left++;
j++;
}
while(k - 1 > j && arr[k] == arr[k - 1]) {
right++;
k--;
}
ans += left * right;
ans = ans % MOD;
j++;
k--;
}
else {
ans += (k - j + 1) * (k - j) / 2;
ans = ans % MOD;
break;
}
}
}
922. 按奇偶排序数组 II
int[] ans = new int[nums.length];
for(int i = 0, j = 1, k = 0; k < nums.length; k++) {
if(nums[k] % 2 == 0) {
ans[i] = nums[k];
i += 2;
}else {
ans[j] = nums[k];
j += 2;
}
}
1684. 统计一致字符串的数目
int[] a = new int[26];26个字母,方便
for(int i = 0; i < allowed.length(); i++) {
a[allowed.charAt(i) - 'a']++;
}
int ans = 0;
for(String word :words) {
ans++;先加上
for(int i = 0; i < word.length(); i++) {
if(a[word.charAt(i) - 'a'] == 0) {
ans--;如果有不在的,再减去
break;直接开始,数组中下一个字符串
}
}
}