Leetcode Weekly Contest 424

楼主: oin1104 (是oin的说)   2024-11-17 12:34:32
大概两千名
不上不下
姆咪
第一题
给一个阵列
从0的地方开始往左或右走
碰到1 就把那个地方-1
然后回头走
看不能能把1走完
思路
反正看两边墙壁有没有一样多就可以知道了
如果其中一边多一个
那就是只能先往那边走
```cpp
class Solution {
public:
int countValidSelections(vector<int>& nums)
{
int cnt = 0;
for(int i : nums)cnt += i;
int n = nums.size();
int res = 0;
vector<int> paper(n,0);
paper[0] = nums[0];
for(int i = 1 ;i < n ; i ++)
{
paper[i] = nums[i] + paper[i-1];
// cout << paper[i] << " ";
}
for(int i = 0 ; i < n ; i ++)
{
if(nums[i] == 0)
{
int k = paper[i]*2;
if( paper[i]*2 == paper[n-1])
{
res += 2;
}
else if( abs(paper[i]*2 - paper[n-1]) <= 1 )
{
res++;
}
}
}
return res;
}
};
```
第二题
给个阵列nums 跟一些queries
queries[i]里面代表可以操作的区间
在那些区间里面 可以把nums-1
看能不能把nums全部都变成0
思路
用前缀和纪录区间的值
然后检查
这是O n
```cpp
class Solution {
public:
bool isZeroArray(vector<int>& nums, vector<vector<int>>& queries)
{
int qn = queries.size();
int n = nums.size();
vector<int> pre(n,0);
for(int i = 0 ; i < qn ; i ++)
{
pre[queries[i][0]]
作者: Meaverzt (Meaverzt)   2024-11-17 12:37:00
太卷了吧
作者: mrsonic (typeB)   2024-11-17 12:39:00
你就一辈子做作业
作者: sustainer123 (caster)   2024-11-17 12:49:00
大师
作者: jensheng09 (甲甲都从后面来)   2024-11-17 12:49:00

Links booklink

Contact Us: admin [ a t ] ucptt.com