2024-05-05
题目传送门:1652. 拆炸弹 - 力扣(LeetCode)
模拟签到题,需要注意的是,C++负数取模还是负数!!!!!!!
所以需要先转成正数再取模。
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public: vector<int> decrypt(vector<int>& code, int k) { int n = code.size(); vector<int> ans(n,0); if (k==0) return ans; for(int i=0;i<n;++i){ for(int j=1;j<=abs(k);++j){ int nw = i+(k/abs(k))*j; while(nw < 0) nw += n; ans[i] += code[nw%n]; } } return ans; } };
|
2024-05-10
题目传送门:2960. 统计已测试设备 - 力扣(LeetCode)
模拟签到题
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int countTestedDevices(vector<int>& batteryPercentages) { int n = batteryPercentages.size(); int ans = 0; for(int i=0;i<n;++i){ if (batteryPercentages[i]) { ans ++; for(int j=i+1;j<n;++j) batteryPercentages[j] = max(batteryPercentages[j]-1,0); } } return ans; } };
|
2024-05-24
题目传送门:1673. 找出最具竞争力的子序列 - 力扣(LeetCode)
单调栈题目,根据题目对竞争力的定义,我们可以发现越小的数字放置的位置越前,对应的子序列越具竞争力。我们可以用类似单调栈的思想尽量将更小的元素放到子序列的前面,令 nums 的大小为 n,遍历数组nums,假设当前访问的下标为 i,对数字 nums[i] 执行以下操作:
- 记栈中的元素数目为 m,我们不断地进行操作直到不满足条件:如果 m>0 且 m+n−i>k 且单调栈的栈顶元素大于 nums[i],那么说明栈顶元素可以被当前数字 nums[i] 替换,弹出单调栈的栈顶元素。
- 将nums[i]压入栈中。
最后返回栈中自下而上的前 k 个元素为结果。
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: vector<int> mostCompetitive(vector<int>& nums, int k) { vector<int> stk; int n = nums.size(); for(int i=0; i<n; ++i) { while (!stk.empty() && n-i+stk.size() > k && stk.back() > nums[i]) stk.pop_back(); stk.push_back(nums[i]); } stk.resize(k); return stk; } };
|
2024-05-25
题目传送门:2903. 找出满足差值条件的下标 I - 力扣(LeetCode)
签到题目,两个循环结束战斗。
最后实现代码如下:
1 2 3 4 5 6 7 8 9
| class Solution { public: vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference) { int n = nums.size(); for(int i=0; i<n;++i){ for(int j=i;j<n;++j){ if (j-i>=indexDifference && abs(nums[j]-nums[i])>=valueDifference) return vector<int>{i, j}; } } return vector<int>{-1,-1}; }};
|
2024-05-26
题目传送门:1738. 找出第 K 大的异或坐标值 - 力扣(LeetCode)
前缀和+排序即可。
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: int kthLargestValue(vector<vector<int>>& matrix, int k) { int n = matrix.size(), m = matrix[0].size(); vector<vector<int>> xor_all(n+1,vector<int>(m+1)); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ xor_all[i][j] = xor_all[i][j-1] ^ matrix[i-1][j-1]; } } for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ xor_all[i][j] = xor_all[i-1][j] ^ xor_all[i][j]; } } vector<int> nw; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ nw.push_back(xor_all[i][j]); } } sort(nw.begin(), nw.end()); int nn = nw.size(); return nw[nn-k]; } };
|
2024-05-27
题目传送门:2028. 找出缺失的观测数据 - 力扣(LeetCode)
模拟签到题
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public: vector<int> missingRolls(vector<int>& rolls, int mean, int n) { int nn = rolls.size(); int N = n + nn; int all_sum = mean*N; for(auto roll:rolls) { all_sum -= roll; } int nw_mean = all_sum / n; vector<int> ans; if (nw_mean < 1 || nw_mean > 6) return ans; int nw_rest = all_sum - (n*nw_mean); if (nw_rest && nw_mean+1>6) return ans; for(int i=1;i<=n;++i) { if(nw_rest)ans.push_back(nw_mean+1),nw_rest--; else ans.push_back(nw_mean); } return ans; } };
|
2024-05-28
题目传送门:2951. 找出峰值 - 力扣(LeetCode)
遍历签到题。
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11
| class Solution { public: vector<int> findPeaks(vector<int>& mountain) { vector<int> ans; int n = mountain.size(); for(int i=1;i<n-1;++i){ if(mountain[i] > mountain[i-1] && mountain[i] > mountain[i+1]) ans.push_back(i); } return ans; } };
|
2024-05-31
题目传送门:2965. 找出缺失和重复的数字 - 力扣(LeetCode)
签到题
最后实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) { int n = grid.size(); int ans1,ans2; vector<int> buk(3000,0); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ int tmp = grid[i][j]; buk[tmp]++; if (buk[tmp] == 2) ans2 = tmp; } } for(int i=1;i<=n*n;++i){ if (!buk[i]) ans1 = i; } return vector<int>{ans2, ans1}; } };
|