[leetcode268]Missing Number
2016-03-03 23:10
302 查看
Question:
Given an array containing n distinct numbers taken from
For example,
Given nums =
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
分析:
题目要求,给定一个数组,求解数组中缺少的一个数据,比如【0,1,2】缺少3,比如【0,1,5,4,3,】缺少2。
方法1:
总和求解,可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,而缺少的极为其中一员,所以如果不缺少元素,那么数组的和是固定的:即0+1+2+3+。。。+nums.size();而缺少数据的数组总和也可以求出来,那么相减结果即为所求。
方法2:
可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,那么可以声明一个大小为nums.size()+1的bool类型的数组,如果数据i在nums中出现,则令bool【i】=true,则可以知道,如果有个bool【m】== false,则缺少的就是m。
方法3:
暴力法,用vector的sort排序,即可知道缺少数据。
代码如下:
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】缺少3,比如【0,1,5,4,3,】缺少2。
方法1:
总和求解,可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,而缺少的极为其中一员,所以如果不缺少元素,那么数组的和是固定的:即0+1+2+3+。。。+nums.size();而缺少数据的数组总和也可以求出来,那么相减结果即为所求。
方法2:
可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,那么可以声明一个大小为nums.size()+1的bool类型的数组,如果数据i在nums中出现,则令bool【i】=true,则可以知道,如果有个bool【m】== false,则缺少的就是m。
方法3:
暴力法,用vector的sort排序,即可知道缺少数据。
代码如下:
<span style="font-size:14px;">class Solution { public: int missingNumber(vector<int>& nums) { //用总和求解 int baseSum = 0; int numsSum = 0; /* for(int i : nums){ numsSum += i; }*/ for(int i = 0; i <= nums.size(); ++i){ if(i < nums.size()){ baseSum += i; numsSum += nums[i]; } else baseSum += i; } return baseSum-numsSum; //用bool变量判断出来哪个数据没有出现 /* vector<bool> b(nums.size()+1,false); for(int i = 0; i < nums.size(); ++i){ b[nums[i]] = true; } for(int i = 0; i < nums.size()+1; ++i){ if(!b[i]) return i; }*/ //暴力法 /*sort(nums.begin(),nums.end()); if(nums[0] == 0){ int i; for(i = 0; i < nums.size()-1; ++i){ if((nums[i]+1) != nums[i+1]) return nums[i]+1; } return i+1; } else return 0;*/ } };</span>
相关文章推荐
- getRawX、getRawY和getX、getY的区别
- [运筹学]关于动态规划的2个问题-最长公共子序列与最长非降子序列问题
- SGU 223. Little Kings
- Objective-C对象之类对象和元类对象
- Emacs折腾02-安装
- 进程
- 基于XMPP协议的手机多方多端即时通讯方案
- Nginx配置Restful风格url
- Aidl与信使的区别
- java 加载dll介绍(转)
- 关于日志的那些事
- STL笔记(3)——空间配置器Allocator(一)
- Android中AIDL进程间通信
- 3 AMQP 0-9-1 Model Explained
- OpenCV3.0 决策树的使用
- 设置UIView四个角中任意角的圆角效果
- Xcode中部分快捷键整理
- 关于数组
- nginx上搭建HLS流媒体服务器
- java内置的进制转换函数