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)

单调栈题目,根据题目对竞争力的定义,我们可以发现越小的数字放置的位置越前,对应的子序列越具竞争力。我们可以用类似单调栈的思想尽量将更小的元素放到子序列的前面,令 numsnums 的大小为 nn,遍历数组nums\textit{nums},假设当前访问的下标为 ii,对数字 nums[i]\textit{nums}[i] 执行以下操作:

  1. 记栈中的元素数目为 mm,我们不断地进行操作直到不满足条件:如果 m>0m>0m+ni>km+n−i>k 且单调栈的栈顶元素大于 nums[i]\textit{nums}[i],那么说明栈顶元素可以被当前数字 nums[i]\textit{nums}[i] 替换,弹出单调栈的栈顶元素。
  2. nums[i]nums[i]压入栈中。

最后返回栈中自下而上的前 kk 个元素为结果。

最后实现代码如下:

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};
}
};

本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。