题目:

Suppose a sorted array 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(未思考:直接做,仔细考虑各种情况来分析)

package leetcode;

public class SearchinRotatedSortedArray {

public static int search(int[] nums, int target) {
        int index = -1;    
        if (nums.length < 1 || nums == null)
            return -1;
        if (nums.length == 1) {
            if (target == nums[0])
                return 0;
            return -1;
        }        
         if (target == nums[0]) {
            index = 0;
        } else if (target == nums[nums.length - 1]) {
            index =  nums.length - 1;
        }
        
        if(nums[0]<nums[nums.length-1]){
        
        index = Erfen(target,nums);
                
        }else{
        
        if (target < nums[0] && target > nums[nums.length - 1]) {
            index = -1;
        } else if (target > nums[0]) {
            int i = 0;
            while(nums[i]<=nums[i+1] && i < nums.length - 1){
                if(nums[i]==target){
                    index = i;
                    break;
                }
                i++;
            }if(target == nums[i]){
                index=i;
            }
            
        } else if (target < nums[nums.length - 1]) {
            int j = nums.length-1;
            while(nums[j-1]< nums[j] && j > 0){
                if(nums[j]==target){
                    index = j;
                    break;
                }
                j--;
            }
            if(target == nums[j]){
                index=j;
            }
            
        }
    }
        return index;
    }

public static int Erfen(int target, int[] array) {
        int left = 0;
        int right = array.length - 1;
        while (left < right-1 ) {
            int mid = left + (right - left) / 2;
            if(target >= array[mid]){
                left = mid;
            }else{
                right = mid;
            }
        }
        if(target == array[left]){
            return left;
        }else if(target == array[right]){
            return right;
        }else {
            return -1;
        }
    }

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = { 3,4,5,6,7,8,9 };
        System.out.println(search(array,5)); 
    }
}

2(借鉴网络,思考后,在数组上设定左右标,利用二分法+递归)

思路:在整个数组中,先二分,找到有序的那一边然后在有序的一边判断是否含有target;如果没有,继续在无序的一半二分,在有序的一边查找

package leetcode;

public class newSearchinRotatedSortedArray {

public static int search(int[] nums, int target) {
    return search(nums,0,nums.length-1,target);
    }

public static int search(int[] nums, int left, int right, int target) {
        // TODO Auto-generated method stub
        if(left > right) return -1;
        
        int mid = (left+right)/2;
        //78123456
        if(nums[mid]==target){
            return mid;
        }
        if(nums[left]<=nums[mid]){
            if(target<=nums[mid]&&target>=nums[left]) {
                return search(nums,left,mid-1,target);                      //二分法加上“=”号!当使用二分法时,可以在每个判断大小的地方加“=”?
            }else{
                return search(nums,mid+1,right,target);
            }
        }else if(nums[mid]<=nums[nums.length-1]){
            if(target>=nums[mid]&&target<=nums[right]){
                return search(nums,mid+1,right,target);
            }else{
                return search(nums,left,mid-1,target);
            }
        }
        return -1;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = { 7,8,9,3,4,5,6 };
        System.out.println(search(array,3)); 
    }
}

转载于:https://www.cnblogs.com/neversayno/p/5277304.html

LeetCode--Search in Rotated Sorted Array相关推荐

  1. LeetCode Search in Rotated Sorted Array II

     Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

  2. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  3. leetcode - Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  4. 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 ...

  5. [leetcode]Search in Rotated Sorted Array @ Python

    原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 题意: Suppose a sorted array is ...

  6. [leetcode]Search in Rotated Sorted Array II

    这道题目仍然是二分,去掉不可能的部分.用了递归,在重复的情况下,就是有可能最左边的和最右边的相等,此时就不能直接判断出区间外的元素,左右两边同时递归.有重复元素的时候,在bad case的时候会退化为 ...

  7. [LeetCode] Search in Rotated Sorted Array

    二分 : 判断条件 当a[left] <= a[mid]时,可以肯定a[left..mid]是升序的 循环有序 一共有以下两种情况 第一种  / / / / / / 条件: (A[mid] &g ...

  8. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  9. 【leetcode】Search in Rotated Sorted Array II(middle)☆

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  10. leetcode 81 Search in Rotated Sorted Array II ----- java

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

最新文章

  1. 【the service mysql57 failed the most】
  2. Centos7 Kubernetes1.8+docker容器集群
  3. 界面 高炉系统_首钢京唐七大系统介绍
  4. Xshell中输入rz提示:-bash: rz: command not found
  5. JavaScript的作用域和上下文
  6. 什么是灰度发布?灰度发布方式 系统的割接 灰度部署典型的框架架构
  7. Python 系统管理利器Fabric
  8. Delphi2010正式版的代码格式化及自动完成
  9. Ribbon界面开发
  10. linux常识 菜鸟教程
  11. 项目保密协议书(范本)
  12. 周易版化学元素周期表
  13. JRebel出现ERROR Failed to obtain seat. Unable to connect to license server
  14. python提取图片中的数字_用Python-OpenCV从车牌图像中提取数字和字母
  15. tween.js 中文使用指南 1
  16. Python使用 Pyvisa库 控制 NI 设备Fluke(详细)
  17. 十大券商:“推土机行情”再现
  18. Python全栈-magedu-2018-笔记13
  19. CTF练习-TU-CTF-2016 pwn BBYS-first-elf-25 记录
  20. 数据全量、增量、比较更新

热门文章

  1. 坚式计算机在线,小学数学竖式计算器
  2. python数据组织存在维度吗_用Python将统计数据不存在的记录按维度对应指标补齐...
  3. centos mysql 端口_Linux CentOS Mysql修改默认端口
  4. 广州站 | 云原生 Serverless 技术实践营精彩回顾
  5. SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践
  6. es6 数组找最大值_JavaScript 查找数组中最大值与最小值
  7. 2019年最后的一天_2019最后一天的说说 2019最后一条朋友圈再见2019
  8. dbeaver导出表结构和数据_Oracle 导入导出表空间跟数据表通用操作笔记
  9. mkfontscale没有这个命令_那些实用的小命令
  10. python import 原理-Python之禅-import this的实现