思路:模拟
class Solution { public: int longestAlternatingSubarray(vector<int>& nums, int threshold) { int res = 0; int n = nums.size(); for(int i = 0; i < n; i ++ ) { if(nums[i] % 2 == 0 && nums[i] <= threshold) { for(int j = i + 1; j < n; j ++ ) { if(nums[j] % 2 == nums[j - 1] % 2 || nums[j] > threshold) break; res = max(res, j - i + 1); } } } if(res == 0) { for(int i = 0; i < n; i ++ ) if(nums[i] % 2 == 0 && nums[i] <= threshold) return 1; } return res; } };
6916. 和等于目标值的质数对 - 力扣(LeetCode)
思路:线性筛质数预处理出n以内的质数,然后双指针模拟
class Solution { public: vector<vector<int>> findPrimePairs(int n) { vector<vector<int>> res; int primes[1000010], cnt = 0; bool st[1000010]; memset(primes, -1, sizeof primes); memset(st, false, sizeof st); for(int i = 2; i <= n; i ++ ) { if(!st[i]) primes[cnt ++ ] = i; for(int j = 0; primes[j] <= n / i; j ++ ) { st[primes[j] * i] = true; if(i % primes[j] == 0) break; } } int l = 0, r = cnt - 1; while (l <= r) { if(primes[l] + primes[r] > n) r -- ; else if(primes[l] + primes[r] < n) l ++ ; else { res.push_back({primes[l], primes[r]}); l ++ , r -- ; } } return res; } };
思路:用multiset来维护滑动窗口,比赛中没想到,自己暴力+剪枝过不了最后几个
class Solution { public: long long continuousSubarrays(vector<int>& nums) { int n = nums.size(); long long res = 0; multiset<int> s; for(int i = 0, j = 0; i < n; i ++ ) { s.insert(nums[i]); while (j <= i && *s.rbegin() - *s.begin() > 2) { s.erase(s.find(nums[j])); j ++ ; } res += (long long)i - j + 1; } return res; } };
2763. 所有子数组中不平衡数字之和 - 力扣(LeetCode)
思路:枚举,计算不平衡贡献值
class Solution { public: int sumImbalanceNumbers(vector<int>& nums) { int res = 0, n = nums.size(); bool st[n + 2]; for(int i = 0; i < n; i ++ ) { int cnt = 0; memset(st, false, sizeof st); st[nums[i]] = true; for(int j = i + 1; j < n; j ++ ) { int x = nums[j]; if(!st[x]) { cnt += 1 - st[x - 1] - st[x + 1]; st[x] = true; } res += cnt; } } return res; } };