• 33. Search in Rotated Sorted Array


    题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array/

    解题思路:

    和剑指offer上的题目一样,两个递增的子数组,找一个值。

    二分法

    如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的,我们只要在有序的半段里用首尾两个数组来判断目标值是否在这一区域内,这样就可以确定保留哪半边了。

    这道题让在旋转数组中搜索一个给定值,若存在返回坐标,若不存在返回-1。我们还是考虑二分搜索法,但是这道题的难点在于我们不知道原数组在哪旋转了,我们还是用题目中给的例子来分析,对于数组[0 1 2 4 5 6 7] 共有下列七种旋转方法:

    0  1  2   4  5  6  7

    7  0  1   2  4  5  6

    6  7  0   1  2  4  5

    5  6  7   0  1  2  4

    4  5  6  7  0  1  2

    2  4  5  6  7  0  1

    1  2  4  5  6  7  0

     1 class Solution {
     2     public int search(int[] nums, int target) {
     3         
     4         if(nums.length==0||nums==null)
     5             return -1;
     6         
     7         int left=0;
     8         int right = nums.length-1;
     9         
    10         while(left<=right)
    11         {
    12             int mid = (left+right)/2;
    13             
    14             if(nums[mid]==target) return mid;
    15             
    16             else if(nums[mid]<nums[right])
    17             {
    18                 if(nums[mid]<target&& nums[right]>=target)
    19                     left = mid+1;
    20                 else
    21                     right = mid-1;
    22             }
    23             else 
    24             {
    25                 if(nums[left]<=target && nums[mid]>target)
    26                     right=mid-1;
    27                 else
    28                     left=mid+1;
    29             }
    30             
    31         }
    32         return -1;
    33         
    34     }
    35 }
  • 相关阅读:
    清除右键图形属性--图形选项
    Hibernate整合Struts2时报错
    shell基础篇(十)shell脚本的包含
    shell基础篇(九)函数
    浅谈sql的字符分割
    shell基础(八)-循环语句
    shell基础(七)-条件语句
    vue ---- Object的一些常用的方法
    vuex的应用和解决的实际问题
    webpack2代码分割
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10834499.html
Copyright © 2020-2023  润新知