leetcode个人题解——#33 Search in Rotated Sorted Array
思路:每次取中间元素,一定有一半有序,另一半部分有序,有序的部分进行二分查找,部分有序的部分递归继续处理。
class Solution {
public:
int pos = -;
int middleSearch(int left, int right,vector<int>& nums, int target){//二分查找
if(left > right || right > nums.size() - || left < )return -;
if(nums[left] == target)return left;
int mid = (left + right) / ;
if(nums[mid] == target)return mid;
if(target>nums[mid]) return middleSearch(mid+,right,nums,target);
else
return middleSearch(left,mid - ,nums,target); } void mixSearch(int left, int right, vector<int>& nums, int target){//混合处理
if(left > right || right > nums.size() - || left < ) return;
if(nums[left] == target) {
pos = left;
return;
}
int ans;
int middle = (left + right) / ;
if(nums[middle] > nums[right]) {
ans = middleSearch(left,middle,nums,target);
if(ans == -) mixSearch(middle+,right,nums,target);
else{
pos = ans;
return;
}
}
else{
ans = middleSearch(middle,right,nums,target);
if(ans == -) mixSearch(left,middle - ,nums,target);
else{
pos = ans;
return;
}
}
} int search(vector<int>& nums, int target) {
mixSearch(,nums.size() - ,nums,target);
return pos;
}
};
写的冗余了点,附上简洁的代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int l = , r = nums.size() - ; while(l <= r){
int mid = l + (r - l) / ; if(nums[mid] == target) return mid;
if(nums[mid] > nums[r]){
if(target > nums[mid] || target <= nums[r]) l = mid + ; // condition for pick right side
else r = mid - ; // else, pick left side
}else{
if(target <= nums[r] && target > nums[mid]) l = mid + ; // condition for pick right side
else r = mid - ; // else, pick left side
}
} return -;
}
};
leetcode个人题解——#33 Search in Rotated Sorted Array的更多相关文章
- LeetCode题解33.Search in Rotated Sorted Array
33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
- [array] leetcode - 33. Search in Rotated Sorted Array - Medium
leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...
- LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>
LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...
- 33. Search in Rotated Sorted Array & 81. Search in Rotated Sorted Array II
33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...
- 刷题33. Search in Rotated Sorted Array
一.题目说明 这个题目是33. Search in Rotated Sorted Array,说的是在一个"扭转"的有序列表中,查找一个元素,时间复杂度O(logn). 二.我的解 ...
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
随机推荐
- springmvc找不到对应的requestmapping
1.检查注解的是否正确. 2.检查配置文件中是否是否正确配置了扫描类. 3.如果上述都正确但还是无法找到对应的mapping,打开tomcat所在的文件夹下的webapp中该项目WEB-INF目录,找 ...
- Linux系统调用原理
操作系统通过系统调用为运行于其上的进程提供服务. 当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 . 内核函数负责响应应用程序的要求,例如操作文件.进行网络通讯或者 ...
- 【星云测试】开发者测试(2)-采用精准测试工具对J2EE Guns开发框架进行测试
配置测试Guns Guns简介 Guns是一个近几年来基于SpringBoot的开源便利且较新的JavaEE项目开发框架,它整合了springmvc + shiro + mybatis-plus + ...
- 【OC底层】一个OC对象占用多少内存?
查看一个NSObject对象占用多少内存 1.引入头文件: #import <objc/runtime.h> #import <malloc/malloc.h> 2.代码如下: ...
- Mac电脑用终端生成SSH key 访问自己的Github
链接:https://www.jianshu.com/p/5b34b7b34cae
- ElasticSearch优化系列四:ES的heap是如何被瓜分掉的
以下分别解读几个我知道的内存消耗大户: Segment Memory Segment不是file吗?segment memory又是什么?前面提到过,一个segment是一个完备的lucene倒排索引 ...
- Jquery中select使用
select获取当前选中的value $('#DDLDEP').change(function () { var depId = $(this).children('option:selected') ...
- day 33 线程
1.线程理论 什么是线程:线程是cpu的最小执行单位(实体),进程是操作系统的数据资源分配单位 2.线程的两种创建方式(重点) 查看线程的pid:使用os模块查看id,线程的id应该是相同的 3. ...
- 使用nohup或者tmux将程序挂在后台
程序挂在后台 nohup nohup 命令 & 这样的命令会将屏幕的输出重定向到同目录的nohup.out中,可以使用 > 来重定向输出. nohup 命令 > .log & ...
- 20155210 潘滢昊 Java第三次实验
Java第三次实验 实验内容 在IDEA中使用工具(Code->Reformate Code)把代码重新格式化 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二 ...