Missing Number -- leetcode
来源:互联网 发布:网络直播版权 编辑:程序博客网 时间:2024/04/30 00:03
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?
算法一,异或
思路同问题Single Number:所有的数出现2次,只有一个数出现次。找出那个数。
1.对给出的数做一遍XOR。
2.对着期望的数全体做一遍XOR。
这样,所有的数都做了2次XOR,只有那个缺失的数只做了一次XOR。
class Solution {public: int missingNumber(vector<int>& nums) { int ans = 0, i = 0; for (auto n: nums) ans ^= n ^ ++i; return ans; }};
算法二,SUM
1.将给出的数,做一个累加和
2. 将期望的数,做一个累加和,
3,两者取差值。
此算法,不足之处,整数溢出问题。
class Solution {public: int missingNumber(vector<int>& nums) { int i = 0, sum = 0; for (auto n: nums) { sum += ++i - n; } return sum; }};
算法三,交换
通过交换进行排序操作。
通过下标映射,将数直接交换到最终位置。
比如0, 移动到 nums[0]; 3 移动到 nums[3]
最后,看一下,与下标不一致的数组元素。其下标即为所求。
在交换过程时,当碰到元素值为nums.size(),我们知道无法将其交换到最终位置。故作一个标志,指示此不一致位置。
并暂时略过此位置的交换。这个位置的理想值,将在后面会交换过来。而那时,nums.size()这个值,将会挪到新位置。并随之更新标记到新位置。
leetcode上实际执行时间为40ms。
class Solution {public: int missingNumber(vector<int>& nums) { int missing = nums.size(); for (int i=0; i<nums.size(); i++) { while (nums[i] != i) { if (nums[i] != nums.size()) swap(nums[i], nums[nums[i]]); else { missing = i; break; } } } return missing; }};
我将此写法也贴在了leetcode上
https://leetcode.com/discuss/56174/3-different-ideas-xor-sum-binary-search-java-code
- 【LeetCode】268 Missing Number
- [leetcode] 268.Missing Number
- [leetcode][math] Missing Number
- [LeetCode] Missing Number
- Leetcode -- Missing Number
- 【leetCode】Missing Number
- [Leetcode]Missing Number
- leetcode Missing Number
- 【leetcode】268. Missing Number
- [leetcode] Missing Number
- LeetCode(268)Missing Number
- Leetcode: Missing Number
- LeetCode之Missing Number
- LeetCode Missing Number
- [leetcode 268]Missing Number
- leetcode--Missing Number
- leetCode #286 Missing Number
- Leetcode 286 : Missing Number
- Hive入门教程
- Eclipse项目树形列表不提示错误解决方案
- android平板与PC之间的socket通信
- 机器视觉code及工具
- [MYSQL]基础知识总结
- Missing Number -- leetcode
- 主成分分析(Principal components analysis)-最大方差解释
- php PDO面向对象的方式连接数据库
- java 网络编程——day24
- Java笔记---其他对象、IO流
- Star Schema完全参考手册读书笔记三
- 关于queue和stack没有clear方法
- IOS 系统常用功能
- poj 3974 Palindrome(manacher)