直接上代码

/**
* Created by lvhao on 2017/6/30.
* 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.
思路是目标值肯定在一个升序子序列中(可能子序列很短,但是肯定存在),目标就是找到这个子序列然后用二分法找到值
找目标序列的时候也是用二分法,判断的依据是mid值比fin值大的话说明左边是升序,小的话,右边是升序,然后在利用升序序列的的
首尾值判断目标值是否在里边,在里边就用二分法找值,不在里边就改变fin或者sta值,继续循环找,注意二分法的时候while的判断
条件是sta<= fin,如果没有=的话,两个数的情况判断不出来。
*/
public class Q33SearchRotatedArray {
public static void main(String[] args) {
int[] nums = new int[]{3,1};
int target = 1;
int res = search(nums,target);
System.out.println(res); }
public static int search(int[] nums, int target) {
int len = nums.length;
//判断特殊情况
if(len == 1 && nums[0] == target)
{
return 0;
}
int sta = 0,fin = len-1,mid,index = -1;
//注意等号
while(sta <= fin)
{
mid = (sta + fin)/2;
if(nums[mid] < nums[fin])
{
if(target <= nums[fin] && target >= nums[mid])
{
index = binarySearch(nums,mid,fin,target);
//找到值之后立即break
break;
} else
fin = mid -1;
}
else
{
if(target <= nums[mid] && target >= nums[sta])
{
index = binarySearch(nums,sta,mid,target);
break;
} else
sta = mid + 1;
}
}
return index;
}
public static int binarySearch(int[] nums,int sta,int fin,int target)
{
int mid,index = -1;
//注意等号
while (sta <= fin)
{
mid = (sta + fin)/2;
if(target == nums[mid])
{
index = mid;
break;
}
else if (target < nums[mid])
fin = mid-1;
else
sta = mid+1;
}
return index;
}
}

最新文章

  1. jquery.print.js 打印插件
  2. React + Redux 入坑指南
  3. [转]svn 命令大全
  4. 在QTP中使用DOM
  5. Maven01——简介、安装配置、入门程序、项目构建和依赖管理
  6. 字符串输入时的strlen()与\0
  7. DotnetSpider (二) Downloader的设置 Request自定义数据字典
  8. [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
  9. 《Spark大数据处理》---Spark原理
  10. ubuntu ImageMagick 图像转换工具
  11. protobuf 动态创建
  12. Luogu P3177 [HAOI2015]树上染色
  13. ubuntu12.04安装Docker
  14. leetcode Sort List 对链表进行排序
  15. php常见问题-foreach和引用造成的问题。
  16. iOS objc_msgSend 报错解决方案
  17. PCA,SVD
  18. Qt下QString转char*
  19. cojs 二分图计数问题1-3 题解报告
  20. 导入exce表格中的数据l到数据库

热门文章

  1. LeetCode 025 Reverse Nodes in k-Group
  2. Alpha冲刺-第九次冲刺笔记
  3. java42
  4. rest-framework:权限组件
  5. MAC下go语言的安装和配置
  6. Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法
  7. 第13.1节 关于Python的异常处理
  8. 第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  9. js 转换为字符串方法
  10. vue优点