268. Missing Number
2016-05-18 13:01
363 查看
题目:
Given an array containing n distinct numbers taken from
find the one that is missing from the array.
For example,
Given nums =
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
题意:
给定一个数组,找出给定数组中漏掉的值。
note:你的算法需要花费线性时间复杂度。且使用常数个额外的空间复杂度。
思路一:
正常的数组值与下标相等。利用异或操作找出不相同的元素。 数组无序。。。。。。。。
代码:40ms
先算出正常情况下数组所有元素之和为多少,之后利用总和减去数组中的每一个元素,剩下的就为缺失的元素。
代码:36ms
从缺失的元素之后,数组元素下标与元素值不再相等,元素值大于下标值,只需要找到第一个下标值与元素值不相等的元素记录下来即可。
代码:36ms
Given an array containing n distinct numbers taken from
0, 1, 2, ..., n,
find the one that is missing from the array.
For example,
Given nums =
[0, 1, 3]return
2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
题意:
给定一个数组,找出给定数组中漏掉的值。
note:你的算法需要花费线性时间复杂度。且使用常数个额外的空间复杂度。
思路一:
正常的数组值与下标相等。利用异或操作找出不相同的元素。 数组无序。。。。。。。。
代码:40ms
class Solution { public: int missingNumber(vector<int>& nums) { for(int i = 0; i < nums.size(); i++) { while(i < nums.size() && nums[i] == i) i++; while(i < nums.size() && nums[i] != i) { if(nums[i] >= nums.size() || nums[i] < 0) break; nums[i] = nums[i] ^ nums[nums[i]] ^ (nums[nums[i]] = nums[i]); } } for(int i = 0; i < nums.size(); i++) if(nums[i] != i) return i; return nums.size(); } };代码:36ms
class Solution { public: int missingNumber(vector<int>& nums) { int result = nums.size(); for(int i=0; i<nums.size(); i++){ result ^= nums[i] ^ i; } return result; } };思路二:
先算出正常情况下数组所有元素之和为多少,之后利用总和减去数组中的每一个元素,剩下的就为缺失的元素。
代码:36ms
class Solution { public: int missingNumber(vector<int>& nums) { int result = nums.size() * (nums.size() + 1)/2; for(int i=0; i<nums.size(); i++){ result -= nums[i]; } return result; } };思路三:
从缺失的元素之后,数组元素下标与元素值不再相等,元素值大于下标值,只需要找到第一个下标值与元素值不相等的元素记录下来即可。
代码:36ms
class Solution { public: int missingNumber(vector<int>& nums) { int pre = -1; int cur = 0; int size = nums.size(); while(cur<size){ if(nums[cur]!=cur){ if(nums[cur]!=size){ swap(nums[cur], nums[nums[cur]]); }else{ pre = cur; cur++; } }else{ cur++; } } return pre == -1 ? size : pre; } };转载地址:https://leetcode.com/discuss/54454/swapping-numbers-to-the-same-index-cell
相关文章推荐
- ios通过字符串获取类名
- Football
- dup与赋值语句用于文件描述符的区别
- StrutsDispatch1.x
- 自己对OC中Block的理解2
- LinuxServer开机自动登录和自启动程序设置
- CSDN-markdown语法简介
- 集训第一周总结
- USACO Angry Cows总结
- 最小生成树[Prim]
- 最小生成树[Kruskal]
- 拓扑排序
- message[时间标记]
- stone
- 第十二周第三项目——类运算的实现(运算符重载)
- C++ 相关知识总结
- 解决SAP 从nonicode 升级到unicode 环境中 出现 RFC 中文用户名 问题
- 日文 LaTeX 系统介绍 - 最简示例
- C语言编程---socket基础
- 关于烧录工具的总结