当前位置:   article > 正文

Leetcode:【448. 找到所有数组中消失的数字】题解_leetcode448

leetcode448

题目

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果

难度:简单

题目链接:448. 找到所有数组中消失的数字

示例1

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]

示例2

输入:nums = [1,1]
输出:[2]

解题思路:

题目意思是再在有 n 个元素的数组中,找出[1,n]中没有出现的数组,其中 n 个元素中,可能会出现重复的元素,于是 我们就可以 再次创建一个临时数组tmp(每个元素置0),存放相应的元素来取消重复的元素。然后遍历整个数组,如果元素为零,则为没有出现在nums中的数字。

代码展示

  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
  5. int *arr = (int*)malloc(sizeof(int)*numsSize);//用于返回的数组
  6. int tmp[100000] = {0};
  7. int i = 0;
  8. int x = 0;
  9. for(i = 0;i<=numsSize;i++)
  10. {
  11. tmp[i] = 0;
  12. }
  13. for(i = 0;i<numsSize;i++)
  14. {
  15. x = nums[i]%(numsSize+1);
  16. tmp[x-1] = x;
  17. }
  18. i = 1;
  19. int count = 0;//记录返回数组的大小
  20. int j = 0;
  21. for(i = 1;i<=numsSize;i++)
  22. {
  23. if(tmp[i-1] == 0)
  24. {
  25. arr[j++] = i;
  26. count++;
  27. }
  28. }
  29. *returnSize = count;
  30. return arr;
  31. }

【解析】

这里的arr数组用于返回数组,tmp 临时数组主要用来消除重复的元素,主要思路

通过对循环每一个数组元素,对其进行取模运算,再将其放入对应的下标的数组中

但是前提是 要对 tmp数组每一个元素置0

 

 放入对应的下标的数组中后,

 开始遍历数组,找出[1,n] 中没有出现在nums数组中的数字

  1. for(i = 1;i<=numsSize;i++)
  2. {
  3. if(tmp[i-1] == 0)
  4. {
  5. arr[j++] = i;
  6. count++;
  7. }
  8. }

接着就是返回  返回数组的大小和返回数组了。

  1. *returnSize = count;
  2. return arr;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/573755
推荐阅读
相关标签
  

闽ICP备14008679号