Leetcode -- Missing Number
2015-08-24 18:53
260 查看
题目:
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?
分析:
少了一个数,找出来。要求线性时间,常数空间。也就是说,排序是行不通的;再创建一个数组来记录也是不对的。
思路:
从0到N的总和计算出来,减去出现的,剩下的就是没出现的啦!
代码:
参考Discussion:
思路:
位操作。两个相同的数字异或,结果是0。这样的话,将数组的内容与0到N的数字进行异或结果就是只出现过一次的数啦!!
代码:
注意:显然第二个思想是具有可扩展性。第一种解法太侥幸了,一旦数组很长,就会出现溢出的现象。Leetcode这道题的测试力度显然不够。
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?
分析:
少了一个数,找出来。要求线性时间,常数空间。也就是说,排序是行不通的;再创建一个数组来记录也是不对的。
思路:
从0到N的总和计算出来,减去出现的,剩下的就是没出现的啦!
代码:
class Solution { public: int missingNumber(vector<int>& nums) { int len = nums.size(); int sum = len*(len+1)/2; for(int i = 0; i< len ; i++) { sum = sum - nums[i]; } return sum; } };
参考Discussion:
思路:
位操作。两个相同的数字异或,结果是0。这样的话,将数组的内容与0到N的数字进行异或结果就是只出现过一次的数啦!!
代码:
class Solution { public: int missingNumber(vector<int>& nums) { int result = nums.size(); int i=0; for(int num:nums){ result ^= num; result ^= i; i++; } return result; } };
注意:显然第二个思想是具有可扩展性。第一种解法太侥幸了,一旦数组很长,就会出现溢出的现象。Leetcode这道题的测试力度显然不够。
相关文章推荐
- SQL语句实现查询并自动创建Missing Index
- C/C++位操作实例总结
- JavaScript原生对象之Number对象的属性和方法详解
- Prototype源码浅析 Number部分
- JS中不为人知的五种声明Number的方式简要概述
- JavaScript中的object转换成number或string规则介绍
- Javascript基础教程之数据类型 (数值 Number)
- JavaScript中number转换成string介绍
- C++位操作的常见用法小结
- ERROR 1222 (21000): The used SELECT statements have a different number of columns
- javascript parseInt与Number函数的区别
- PHP number_format() 函数定义和用法
- oracle ORA-00988 missing or invalid password 错误
- js中将String转换为number以便比较
- JavaScript中string转换成number介绍
- 浅谈JavaScript Math和Number对象
- support default-int
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1