博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ leetcode 刷题 0~n-1中缺失的数字
阅读量:3966 次
发布时间:2019-05-24

本文共 1340 字,大约阅读时间需要 4 分钟。

这个题正确的选择应该使用二分法

文章目录

题目描述:

难度简单42

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

一.最简单的方法

就是数组中的元素和对应的下标不相同就返回这个下标

遍历结束就返回这个数组的长度;

class Solution {public:    int missingNumber(vector
& nums) { for (int i = 0; i < nums.size() ; i++) { if (i != nums[i]) return i; } return nums.size(); }};

最坏情况要遍历整个数组 所以时间复杂度是O(n);

二.二分法

思路: 根据题意,我们可以用二分法来解答;先将 left = 0; right = nums.size() ;left = right 循环结束;middle 取 left 和 right 中间的元素如果 nums[middle] == middle ; 说明 middle 和left的区间内左边不可能出现这个不在数组中的数字;往右边找这个不在数组中的数字; 将left 和 right 这个区间缩小;left = middle +1 ;排除一半的数据;如果nums[middle] != middle 说明这个不在数组中的数字可能出现在left 和 middle 区间内; 将left 和 right 这个区间缩小; right = middle;循环结束时left 或者right就是那个不在数组中的数字;因为此时left == right;

class Solution {public:    int missingNumber(vector
& nums) { int left = 0,right = nums.size(); while (left < right) { //使用(left + right)/2 也可以 但是要注意 left + right 可能会超过 int 表示范围 //left + (right - left )/2 可以有效的 防止溢出; int middle = left + (right - left)/2; if (middle == nums[middle]) { left = middle + 1; } else { right = middle; } } return left; }};

时间复杂度为O(log(n));

注:

有一种是利用求和公式,我的数学是体育老师教的 求和公式: n*(n +1)/2;但是我不知道为啥,所以我不敢去写;

转载地址:http://abyki.baihongyu.com/

你可能感兴趣的文章
用Gradle 构建你的android程序
查看>>
Android监听应用程序安装和卸载实现程序
查看>>
Android 监听apk安装替换卸载广播的实现代码
查看>>
Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
查看>>
Android下拉刷新上拉加载控件,对所有View通用!
查看>>
Android自定义控件实战——仿多看阅读平移翻页
查看>>
Android自定义控件实战——仿淘宝商品浏览界面
查看>>
Android自定义控件实战——水流波动效果的实现WaveView
查看>>
Android自定义控件实战——水波纹标签云TagCloud
查看>>
Android自定义控件实战——滚动选择器PickerView
查看>>
Android自定义控件实战——下拉刷新控件终结者:PullToRefreshLayout
查看>>
Android事件分发、View事件Listener全解析
查看>>
Eclipse下使用Ant多渠道批量打包
查看>>
Eclipse下Ant自动打包,混淆和签名
查看>>
android 集成第三方静态库的编译方法
查看>>
linux环境下编译不成功
查看>>
Android系统时间制式的获取(24钟头制式/12小时制式)及UTC与本地时间的转换
查看>>
Android WebView Long Press长按保存图片到手机
查看>>
How To Install Java on Ubuntu with Apt-Get
查看>>
Setting up a Linux build environment
查看>>