[leetcode] 268.Missing Number
2015-08-24 10:30
375 查看
题目:
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,1,2..n中抽出n个数,找出哪一个数没有被抽中。
思路:
最简单的方法是将这n个数加起来,再用原来的n+1个数的和即n*(n+1)/2,减去这n个数的和。
但是这种题目,容易考的是当这些数累加起来会溢出。我采用的做法是使用long long保存中间结果,并且不是将所有的数累加起来再减去,我是一边添加那n个数,一边从0-n依次减去。比如原来数字是0,1,2,3,4,5,6;抽了一个数之后是1,2,3,4,5,6,那么我在对后面每一个数字往里面添加时(依次1,2,3,4,5,6)的同时,会减去前面每一个数字(依次减去0,1,2,3,4,5,6)。这两个加减是同时进行的。
以上。
代码如下:
2.当然我们也可以采用位操作的方法,对于原始数组A,元素是0-n,对于抽取的数组B,元素是A中的元素少了一个。所以A,B两个数组合起来就是B中的元素都出现两次,另一个缺失的元素只出现一次。所以A,B中所有的元素异或起来的结果就是我们需要找的missing value。
以上。
代码如下:
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,1,2..n中抽出n个数,找出哪一个数没有被抽中。
思路:
最简单的方法是将这n个数加起来,再用原来的n+1个数的和即n*(n+1)/2,减去这n个数的和。
但是这种题目,容易考的是当这些数累加起来会溢出。我采用的做法是使用long long保存中间结果,并且不是将所有的数累加起来再减去,我是一边添加那n个数,一边从0-n依次减去。比如原来数字是0,1,2,3,4,5,6;抽了一个数之后是1,2,3,4,5,6,那么我在对后面每一个数字往里面添加时(依次1,2,3,4,5,6)的同时,会减去前面每一个数字(依次减去0,1,2,3,4,5,6)。这两个加减是同时进行的。
以上。
代码如下:
class Solution { public: int missingNumber(vector<int>& nums) { long long result = 0; int i = 0; for(auto num:nums) { result += i; result -= num; i++; } result += i; return result; } };
2.当然我们也可以采用位操作的方法,对于原始数组A,元素是0-n,对于抽取的数组B,元素是A中的元素少了一个。所以A,B两个数组合起来就是B中的元素都出现两次,另一个缺失的元素只出现一次。所以A,B中所有的元素异或起来的结果就是我们需要找的missing value。
以上。
代码如下:
class Solution { public: int missingNumber(vector<int>& nums) { int result = 0; for(auto num:nums) result ^= num; int n = nums.size(); for(int i = 0; i < nums.size() + 1; i++) result ^= i; return result; } };
相关文章推荐
- POJ 1484 Blowing Fuses(水~)
- ACM Computer Factory(POJ--3436
- POJ--1995--Raising Modulo Numbers
- Linux命令: cut命令的使用方法
- 制造并批量生产现实版“储物戒指”
- 【LeetCode】268 Missing Number
- [LeetCode] House Robber
- 8月20日全球六大国际域名解析量变化情况统计报告
- performSegue的执行过程
- 专车动态加价太高乘客不爽:最高加价4.75倍
- Hibernate关系映射总结
- 黑马程序员_java基础之IO流(一)
- 实习笔记6
- java中substring的用法
- 网页版上拉加载
- POJ 1477 && HDU 1326 Box of Bricks(水~)
- OpenCV和Cuda结合编程
- 【SQL Server Hardware】Windows Server下启用SQL Server 2008的远程连接
- oracle闪回技术
- struts2和servlet区别