0
点赞
收藏
分享

微信扫一扫

新能源汽车充电桩主板的常见故障及解决办法

看山远兮 4小时前 阅读 0

题目描述

给定一个包含 [0, n]n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

示例 1:

示例 2:

示例 3:

示例 4:

提示:

  • n == nums.length
  • 1 <= n <= 104
  • 0 <= nums[i] <= n
  • nums 中的所有数字都 独一无二

进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?

解题方法

  • C 排序法
/* 自定义比较函数 */
int mycmp(int* a, int* b) { return *a - *b; }

int missingNumber(int* nums, int numsSize) {
    /* 由小到大排序 */
    qsort(nums, numsSize, sizeof(int), mycmp);
    /* 遍历数组 索引与值对应不上的即为缺失的元素*/
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] != i) {
            return i;
        }
    }
    return numsSize;
}
  • C 求和法
int missingNumber(int* nums, int numsSize) {
    /* 求 1 + 2 + 3 + .... + numsSize 的和 */
    int sum = numsSize * (numsSize + 1) / 2;
    for (int i = 0; i < numsSize; i++) {
        /* 依次减去数组元素,剩下的即是丢失元素 */
        sum = sum - nums[i];
    }
    return sum;
}
举报

相关推荐

0 条评论