zoukankan      html  css  js  c++  java
  • LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)

     
    Problem :当前的数组是一个经过排序之后的循环有序数组,但是该数组的主元选择并不一定是下标为i=0的第一个元素。
    例如有序数组为:{1,2,3,4,5,6} 
    其循环有序数组可能为: {3,4,5,6,1,2}、 {6,1,2,3,4,5}、{4,5,6,1,2,3}等
     
    进行查询操作,使用折半查找。
    需要不断判断nums[mid] 与target 
    以及 target与 nums[start] 
    和 target与nums[end]的大小关系
    if (nums[start] <= nums[mid]){//mid大于start
          if (target < nums[mid] && target >= nums[start])// target在start和mid之间
                end = mid - 1;
          else
                start = mid + 1;
    }
    if (nums[mid] <= nums[end]){//mid小于end
          if (target > nums[mid] && target <= nums[end])//target在mid和end之间
                start = mid + 1;
          else
                end = mid - 1;
    }      
     
    根据上述的关系,进行对start和end指针的更新操作。
     
    直到 nums[mid] == target时,找到当前下标为mid
     
    循环条件为while(start<=end) 
     
    参考代码:
     
    package leetcode_50;
    
    /***
     * 
     * @author pengfei_zheng
     * 在数组中查找target 并返回其下标
     */
    public class Solution33 {
        public int search(int[] nums, int target) {
            int start = 0;
            int end = nums.length - 1;
            while (start <= end){
                int mid = (start + end) / 2;
                if (nums[mid] == target)
                    return mid;
                if (nums[start] <= nums[mid]){
                     if (target < nums[mid] && target >= nums[start]) 
                        end = mid - 1;
                     else
                        start = mid + 1;
                } 
                if (nums[mid] <= nums[end]){
                    if (target > nums[mid] && target <= nums[end])
                        start = mid + 1;
                     else
                        end = mid - 1;
                }
            }
            return -1;
        }
    }
     
  • 相关阅读:
    P1312 [NOIP2011 提高组] Mayan 游戏
    Codeforces Round 736
    CF487E Tourists
    荏苒
    数论
    [NOI2009] 二叉查找树 题解
    元素
    线性基
    杂录
    SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6531773.html
Copyright © 2011-2022 走看看