zoukankan      html  css  js  c++  java
  • Find Min In Rotated Sorted Array,寻找反转序列中最小的元素。

    问题描述:寻找反转序列中最小的元素。

    算法分析:和寻找某个数是一个道理,还是利用二分查找,总体上分两种情况。nums[left]<=nums[mid],else。但是,在截取子序列的时候,有可能得到一个顺序序列。如34512,截取后得到12,此时要对这种情况判断,因为是顺序的,所以,最左边的元素就是最小元素。这点区别于寻找target,因为寻找target是根据target和left,mid,right做比较判断的。所以就不用对这种顺序情况单独讨论了。

     1 public int findMin(int[] nums)
     2         {
     3             return findMin(nums, 0, nums.length - 1);
     4         }
     5         //递归
     6         public int findMin(int[] nums, int left, int right)
     7         {
     8             if(left == right)
     9             {
    10                 return nums[left];
    11             }
    12             if(nums[left] < nums[right])//例如34512,在截取子序列时候,很可能就得到一个顺序序列,这时候直接判断。
    13             {
    14                 return nums[left];
    15             }
    16             int mid = (left+right)/2;
    17             if(nums[left] < nums[mid])
    18             {
    19                 return findMin(nums, mid+1, right);
    20             }
    21             else
    22             {
    23                 return findMin(nums, left, mid);
    24             }
    25         }
    26         
    27         //迭代
    28         public int findMin2(int[] nums, int left, int right)
    29         {
    30             while(left <= right)
    31             {
    32                 if(nums[left] < nums[right])
    33                 {
    34                     return nums[left];
    35                 }
    36                 if(left == right)
    37                 {
    38                     return nums[left];
    39                 }
    40                 int mid = (left+right)/2;
    41                 if(nums[left] <= nums[mid])
    42                 {
    43                     left = mid + 1;
    44                 }
    45                 else
    46                 {
    47                     right = mid;
    48                 }
    49             }
    50             return -1;
    51         }
  • 相关阅读:
    栈和队列
    绪论
    抽象数据类型和python类
    《黑马程序员》流程控制(顺序结构,选择结构,循环结构)(C语言)
    《黑马程序员》C语言中的基本运算(C语言)
    《黑马程序员》C语言中的基本数据类型 (C语言)
    《黑马程序员》 关键字、标示符、注释(C语言)
    获取图片
    文件路径
    文件上传
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5572385.html
Copyright © 2011-2022 走看看