使数组成为递增数组的最少右移次数3
class Solution {public:int minimumRightShifts(vector<int>& nums) {int n = nums.size();int j = -1;for (int i = 0;i < nums.size()-1;i ++) {if (nums[i+1] < nums[i]) {j = i+1;break;}}int k = j+1;if (j == -1) return 0;for (int i = j;i < n;i ++) {if (nums[(i+1)%n] < nums[i%n]) return -1;}return n-j;}};
删除数对后的最小数组长度4
- 题意
- 思路
好 CF。。。
- 代码
class Solution {public:int minLengthAfterRemovals(vector<int> &nums) {int n = nums.size();int x = nums[n / 2];int max_cnt = upper_bound(nums.begin(), nums.end(), x) -lower_bound(nums.begin(), nums.end(), x);return max(max_cnt * 2 - n, n % 2);}};
统计距离为 k 的点对5
- 题意
- 思路
- 代码
class Solution {public:int countPairs(vector<vector<int>> &coordinates, int k) {int ans = 0;unordered_map<long long, int> cnt;for (auto &p: coordinates) {for (int i = 0; i <= k; i++) {// 直接 ans += cnt[...] 会插入不存在的点auto it = cnt.find((p[0] ^ i) * 2000000LL + (p[1] ^ (k - i)));if (it != cnt.end()) {ans += it->second;}}cnt[p[0] * 2000000LL + p[1]]++;}return ans;}};
可以到达每一个节点的最少边反转次数
- 题意
- 思路
换根DP待补
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END