Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)
题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置;你可以假设在数组中没有重复值出现
举例:
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
在旋转后的数组中查找6,则返回index =2. 若查找10,则返回index= -1;
解题思路:
由于数组中没有重复出现的数字,因此旋转后的数组基本可以划分为两部分;因此解题思路可以转换为我们熟悉的二分查找;但是在二分查找时我们需要注意,到底在哪边查找?
1) 假设此时在[start, end]之间查找,则mid = (start + end) / 2;此时有三种情况,即nums[mid] > target, nums[mid] < target, nums[mid] = target;
2) nums[mid] > target这种情况下,如何缩小start或者end的范围呢?
a) 456789123, nums[mid] = 8, target =2, 此时判断条件应当是nums[start] > nums[end](表示将原数组将数组划分为两部分,第一部分是升序,第二部分也是升序)&& nums[mid] > = nums[start](表示[start, mid]之间的数是一个严格的升序) && target < nums[start](表示所求的值在第二部分的升序中),此时将所有的条件整合起来,则可判断要找的值一定在后半段,即start = mid + 1;否则end = mid -1
3) nums[mid] < target的情况用同样的方法去除一半
但是要注意每次缩小的一半一定是一个升序或者降序;
代码如下:
public class Solution {
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
int mid = 0;
while(start <= end)
{
mid = (start + end) / 2;
if(target < nums[mid])
{
if(nums[start] > nums[end] && nums[mid] >= nums[start] && target < nums[start])
start = mid + 1;
else
end = mid - 1;
}
else if(target > nums[mid])
{
if(nums[start] > nums[end] && nums[mid] < nums[end] && target > nums[end])
end = mid - 1;
else
start = mid + 1;
}
else
return mid;
}
return -1;
}
}
Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)的更多相关文章
- 【LeetCode】Find Minimum in Rotated Sorted Array 在旋转数组中找最小数
Add Date 2014-10-15 Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some p ...
- 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 ...
- Leetcode33.Search in Rotated Sorted Array搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目标值, ...
- [CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索
11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- [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 7 migh ...
- [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)
This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...
- [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 在旋转了的数组中查找
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- spring4、hibernate4整合xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 一、单例模式(Singleton)
单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点.” 特点:一是某个类只能有一个实例: 二是它必须自行创建这个实例: ...
- 3、HTTP content-type
HTTP content-type Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个文件, ...
- 文件系统结构-《循序渐进linux》
1.目录结构 很多linux的发行版都遵循FSSTND标准,这一标准仅包含系统最基本的文件. /dev 设备文件 /bin 可执行的二进制文件 /opt /root 超级用户的主目录 /home 每个 ...
- Java多线程常见问题
1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和 ...
- {Linux} boot仅剩余XX字节
1. 查看已安装的linux-image各版本 dpkg --get-selections |grep linux-image 2. 查看我们当前使用的是哪一个版本: uname -a 3. ...
- 微软分布式机器学习工具包DMTK——初窥门径
在现在机器学习如日中天的大背景下,微软亚洲研究院的实习岗位中,机器学习组的工作也是维护DMTK,参与算法改进,那么在此之前我们得了解DMTK是个啥. DMTK由一个服务于分布式机器学习的框架和一组分布 ...
- 【转】json格式化、高亮库jsonFormater
http://leo108.com/pid-1996.asp JsonFormater 基于jQuery的json格式化.高亮库 核心代码参考天马行空工作室,本人只做了模块化和一些代码优化. demo ...
- SSH程序框架之Spring与HIbernate整合
spring整合hibernate 有两种方式 1.注解方式 2.xml方式实现 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory ...
- ES6_Promise 对象 阮一锋
Promise的含义 promise是异步编程的一种解决方法,比传统的回调函数和事件更合理更强大.他由社区最早提出和实现,ES6将其写进语言标准,统一了用法,原生提供了promise对象.所谓prom ...