LeetCode 33.Search in Rotated Sorted Array(M)
题目:
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
思路:
1.当数组长度为0时,return -1;
2.当数组长度为1时,比较nums[0]与target关系;
3.当数组长度大于1,且为rotated sorted array时,根据nums[mid]与nums[start]关系判断如何移动;
4.当数组长度大于1,但不是rotated sorted array时,用传统二分法;
5.注意,不仅仅要比较target与nums[mid]关系,还要比较其与nums[start]和nums[end]关系,否则会出现死循环。
代码:
public class Solution {
public int search(int[] nums, int target) {
int start = 0,end = nums.length-1,mid = 0;
if(nums.length == 0){
return -1;
}
if(nums.length == 1){
if(nums[0] == target){
return 0;
}else{
return -1;
}
}
while(nums[start] > nums[end] && start + 1 < end){
mid = start + (end - start)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] > nums[start]){
if(nums[mid] <= target ){
start = mid;
}else if(nums[start] <= target){
end = mid;
}else if(nums[start] >= target){
start = mid;
}
}else if(nums[mid] < nums[start]){
if(nums[mid] >= target){
end = mid;
}else if(nums[start] <= target){
end = mid;
}else if(nums[start] >= target){
start = mid;
}
}
}
while(nums[start] < nums[end] && start + 1 < end){
mid = start + (end - start)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] >= target){
end = mid;
}else{
start = mid;
}
}
if(nums[start] == target){
return start;
}else if(nums[end] == target){
return end;
}
return -1;
}
}
LeetCode 33.Search in Rotated Sorted Array(M)的更多相关文章
- 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 之Search in Rotated Sorted Array(四)
描述 Follow up for ”Search in Rotated Sorted Array”: What if duplicates are allowed? Would this aff ...
- LeetCode:33. Search in Rotated Sorted Array(Medium)
1. 原题链接 https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 2. 题目要求 给定一个按升序排列的 ...
- leetcode 之Search in Rotated Sorted Array(三)
描述 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
- LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description Problem :当前的数组 ...
- [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] 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(排序旋转数组的查找) 解题思路和方法
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- 吴裕雄--天生自然python机器学习:支持向量机SVM
基于最大间隔分隔数据 import matplotlib import matplotlib.pyplot as plt from numpy import * xcord0 = [] ycord0 ...
- day34-进程
#进程是程序的运行,程序不运行不产生进程. #1.进程的并行与并发: # 并行:是指两者同时执行,比如赛跑,两人都在不停的往前跑.(资源够用,比如三个线程,四核的cpu) # 并发:是指资源有限的情况 ...
- Windows2012R2 设置NTP时间服务器
一.服务端配置 (Ntp服务器,客户端将根据这台服务器的时间进行同步) 1.微软键+R键,进入“运行”,输入“regedit”,进入注册表 2. HKEY_LOCAL_MACHINE\SYSTEM\C ...
- yaml文件的格式
后缀为.yml 格式一般就是key:空格 value 这里的value可以是 普通数据(数字,字符串) ---------------------------------------- ...
- 利用数目找中位数(牛客第七场E)
https://ac.nowcoder.com/acm/contest/887/E 树状数组做法(代码有注释) #include<bits/stdc++.h> using namespac ...
- python学习笔记(7)数据类型转换
- isdigital()函数
函数说明: 主要用于检查其参数是否为十进制数字字符. 头文件: C——#include<ctype.h> C++——#include<cctype> 函数定义: int is ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-执行测试用例(16)
执行测试用例 # -*- coding: utf-8 -*- # @Time : 2020/2/12 22:56 # @File : run_test_16.py # @Author: Hero Li ...
- IOC @Autowired/@Resource/@Qulified的用法实例
首先要知道另一个东西,default-autowire,它是在xml文件中进行配置的,可以设置为byName.byType.constructor和autodetect:比如byName,不用显式的在 ...
- Data Binding on Android
Data Binbing框架是在2015年Google I/O大会上最早提出来的,一直在Android开发者中热议,但是很少有真正在项目中用到.本文简单介绍Data Binding框架的简单用法以及其 ...