268. Missing Number

╰半橙微兮° 2022-06-09 03:55 311阅读 0赞
  1. /*
  2. 268. Missing Number
  3. Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.
  4. For example,
  5. Given nums = [0, 1, 3] return 2.
  6. Note:
  7. Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
  8. */
  9. //思路:先写一个数组,给他赋值,然后将nums排序,之后一一对比,如果有缺少的数,就输出;没有的话就输出下一个。
  10. // 26ms 4.6%
  11. int missingNumber(int* nums, int numsSize) {
  12. int num[numsSize],i;
  13. quicksort(nums,0,numsSize-1);//对给定的数组排序
  14. for(i=0;i<numsSize;i++)//对于新数组赋值
  15. num[i] = i;
  16. for(i=0;i<numsSize;i++)//对比两个数组数值
  17. if(num[i] != nums[i])
  18. return num[i];
  19. if(i == numsSize )//如果没有缺失返回下一个数
  20. return i;
  21. return;
  22. }
  23. void quicksort(int* nums,int left,int right)
  24. {
  25. int i,j,t,temp;
  26. if(left>right)
  27. return;
  28. temp=nums[left]; //temp中存的就是基准数
  29. i=left;
  30. j=right;
  31. while(i!=j)
  32. {
  33. //顺序很重要,要先从右边开始找
  34. while(nums[j]>=temp && i<j)
  35. j--;
  36. //再找右边的
  37. while(nums[i]<=temp && i<j)
  38. i++;
  39. //交换两个数在数组中的位置
  40. if(i<j)
  41. {
  42. t = nums[i];
  43. nums[i] = nums[j];
  44. nums[j] = t;
  45. }
  46. }
  47. //最终将基准数归位
  48. nums[left] = nums[i];
  49. nums[i] = temp;
  50. quicksort(nums,left,i-1);//继续处理左边的,这里是一个递归的过程
  51. quicksort(nums,i+1,right);//继续处理右边的 ,这里是一个递归的过程
  52. }

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读