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;
        }
    }
     
  • 相关阅读:
    python note 30 断点续传
    python note 29 线程创建
    python note 28 socketserver
    python note 27 粘包
    python note 26 socket
    python note 25 约束
    Sed 用法
    python note 24 反射
    python note 23 组合
    python note 22 面向对象成员
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6531773.html
Copyright © 2011-2022 走看看