zoukankan      html  css  js  c++  java
  • LeetCode33 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 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. (Hard)

    分析:

    跟旋转排序数组(rotated sorted array)有关的的问题,一般可以考虑二分的思路。

    之前的总结见:

    http://www.cnblogs.com/wangxiaobao/p/4915853.html

    本题就是要搞清楚什么时候start = mid 什么时候end = mid即可,画图是想明白的最好的方法。

    比如下面这幅很丑的图就能说明意思,左括号代表start = mid, 右括号代表 end = mid,星号是target的位置。

    可以看出,start = mid

    在 target > nums[0] (左图)的时候有 一种情况 即  nums[0] < nums[mid] < target;

    在target < nums[0](右图)的时候有两种情况,即nums[mid] > nums[0] || nums[mid] < target;

    其他情况就时end = mid了。

    nums[0] ==target单独判断一下,这样后续判断条件清晰一些。

    代码:

     1 class Solution {
     2 public:
     3     int search(vector<int>& nums, int target) {
     4         int start = 0, end = nums.size() - 1;
     5         if (nums[0] == target) {
     6             return 0;
     7         }
     8         while (start + 1 < end) {
     9             int mid = start + (end - start) / 2;
    10             if (nums[mid] == target) {
    11                 return mid;
    12             }
    13             else if ( (target > nums[0] && (nums[mid] < target && nums[mid] > nums[0] ))
    14                     || (target < nums[0] && (nums[mid] < target || nums[mid] > nums[0])) ) {
    15                 start = mid;
    16             }
    17             else {
    18                 end = mid;
    19             }
    20         }
    21         if (nums[start] == target) {
    22             return start;
    23         }
    24         if (nums[end] == target) {
    25             return end;
    26         }
    27         return -1;
    28     }
    29 };
  • 相关阅读:
    更改sql server数据库所有者的对象
    对C#委托及事件委托的理解
    印度人是怎样开发软件的?
    SQL常用函数
    Ajax学习1
    Ajax学习2
    什么是ORM?
    jQuery 移动网页到制定的位置
    Juery 控件的取值赋值
    js禁用滚动条
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/5791367.html
Copyright © 2011-2022 走看看