leetcode 22-03-19

今天的 leetcode

  • 27. 移除元素
  • 1491. 去掉最低工资和最高工资后的工资平均值
  • 1523. 在区间范围内统计奇数数目

27. 移除元素

解题思路

只需要将原有数组覆盖就行,只有不等于 val 值的才会去覆盖,等于 val 值的就跳过覆盖,只需要记录覆盖了多少次就行

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C
int removeElement(int* nums, int numsSize, int val){
if (val > 100 || val < 0)
return 0;
if (numsSize > 100 || numsSize < 0)
return 0;

int newSize = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] != val) {
nums[newSize++] = nums[i];
}
}
return newSize;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// C
int removeElement(int* nums, int numsSize, int val){
int newSize = 0;
int i = 0;
while (i < numsSize) {
if (nums[i] == val) {
i++;
continue;
}
nums[newSize++] = nums[i];
i++;
}
return newSize;
}

1491. 去掉最低工资和最高工资后的工资平均值

解题思路

求出最大最小值和总值,然后 $ (sum - max - min) \div (salarySize - 2) $

代码

1
2
3
4
5
6
7
8
9
10
11
12
// C
double average(int* salary, int salarySize){
double sum = 0;
double max = salary[0];
double min = salary[0];
for(int i = 0; i < salarySize; i++){
sum += salary[i];
max = max < salary[i] ? salary[i] : max;
min = min > salary[i] ? salary[i] : min;
}
return (sum - max - min) / (salarySize - 2);
}

1523. 在区间范围内统计奇数数目

解题思路

当总数为偶数个时,奇数个数必然为总数的一半
当总数为奇数个时,偶数到偶数间必然是总数整除一半
当总数为奇数个时,奇数到奇数间必然比偶数多一个

代码

1
2
3
4
5
6
7
// C
int countOdds(int low, int high){
if ((high - low) % 2 == 0 && low % 2 == 0){
return (high - low) / 2;
}
return (high - low) / 2 + 1;
}