leetcode 22-03-24

今日份 leetcode ,昨天没更,因为发现关于树的都不会,我需要先去研究一下

  • 1588. 所有奇数长度子数组的和
  • 283. 移动零
  • 1672. 最富有客户的资产总量

1588. 所有奇数长度子数组的和

解题思路

从第一个元素开始往下,计算每奇数个连续的数能组合的情况的和再相加
大概就像这样

1
2
3
4
5
6
<< [1,2,3,4]

>> [1],[1,2,3]
>> [2],[2,3,4]
>> [3]
>> [4]

代码

1
2
3
4
5
6
7
8
9
10
11
12
int sumOddLengthSubarrays(int* arr, int arrSize) {
int sum = 0;
for (int left = 0; left < arrSize; left++){
for(int len = 1; len + left <= arrSize; len += 2){
int right = left + len - 1;
for(int i = left; i <= right; i++){
sum += arr[i];
}
}
}
return sum;
}

283. 移动零

解题思路

只要不等于0的都往前覆盖,并记录下覆盖的次数,然后填0

代码

1
2
3
4
5
6
7
8
9
10
11
12
// C
void moveZeroes(int* nums, int numsSize){
int count = 0;
for(int i = 0; i < numsSize; i++){
if (nums[i] != 0) {
nums[count++] = nums[i];
}
}
for(int i = count; i < numsSize; i++){
nums[i] = 0;
}
}

1672. 最富有客户的资产总量

解题思路

只需要使用一个临时变量来保存每组的总值,然后返回最大的

代码

1
2
3
4
5
6
7
8
9
10
11
12
// C
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
int max = 0;
for(int i = 0; i < accountsSize; i++){
int t = 0;
for(int j = 0; j < *accountsColSize; j++){
t += accounts[i][j];
}
max = max < t ? t : max;
}
return max;
}