《leetCode》:Search in Rotated Sorted Array II
2015-11-26 19:13
519 查看
题目
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array.
题目大意:在一个由排序数组旋转而得到的数组中寻找目标值是否存在。
Search in Rotated Sorted Array可以看这篇博文
思路一:直接遍历
bool search(int* nums, int numsSize, int target) { if(nums==NULL||numsSize<1){ return false; } for(int i=0;i<numsSize;i++){ if(nums[i]==target){ return true; } } return false; }
虽然没有利用到旋转数组这一特性,时间复杂度为O(n),结果居然AC了。
AC结果如下:
思路二
上面这种思路并没有利用旋转数组这一特性,因此,这个思路将利用这个特性来减少时间复杂度。bool search(int* nums, int numsSize, int target) { if(nums==NULL||numsSize<1){ return false; } int begin=0; int end=numsSize-1; while(begin<=end){ int mid=begin+(end-begin)/2; if(nums[mid]==target){ return true; } //以下只比较nums[mid]与nums[end]的大小来控制end和begin的变化 if(nums[mid]<nums[end]){ if(target>nums[mid]&&target<=nums[end]) begin=mid+1; else end=mid-1; } else if(nums[mid]>nums[end]){ if(target>=nums[begin]&&target<nums[mid]) end=mid-1; else begin=mid+1; } else{ end--; } } return false; }
上面的方法虽然利用了二分查找法,但是从AC结果来看,效率并没有改善。可能测试平台的测试用例,出现了很多的第三种情况发生(即执行过多的代码中的
end--)的测试用例。
相关文章推荐
- android 截取当前屏幕保存到sd卡中
- 高性能MySql进化论(十):查询优化器的局限性
- struts中的校验框架
- Activity学习之startActivityForResult()与onPause()的用法
- git版本管理使用指南(附带repo)
- windows下安装redis
- 菜鸟带你飞______DP基础26道水题
- 二维数组中的查找
- 二维数组中的查找
- C++矩阵库 Eigen 快速入门
- 电池使用保养
- HDU 1978 记忆化搜索(dfs+dp)
- osx mac 安装 oracle instant client
- 使用类图实现的另类排序
- 二维码的扫描--iOS
- 高性能MySql进化论(九):查询优化器常用的优化方式
- String、StringBuffer与StringBuilder之间区别
- NetworkSocket结构图
- 异常之org.hibernate.HibernateException: No CurrentSessionContext configured
- FigurePanel 类应用举例