zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】Find Minimum 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).

    Find the minimum element.

    You may assume no duplicate exists in the array.


    题解:就是找数组中第一个“下凹”的地方,可以遍历,不过也可以用二分法,速度更快。

    特别注意边界的处理:如果当前的中间值mid在0这个位置,只要考虑它后面的元素是不是小于它;如果在数组最后的位置上,要考虑它前面的元素是不是大于它。最后当发现当前mid所指的值不是所求的“下凹点”的时候,要把它和最后数组的最后一位比较,如果它比数组的最后一位大,说明要找的“下凹点”在mid所指位置的后面,否则在mid所指位置的前面。

    JAVA版本代码如下:

     1 import java.awt.datatransfer.StringSelection;
     2 
     3 public class Solution {
     4     public static void main(String[] args){
     5         int num[] = {3,4,5,1,2};
     6         Solution s = new Solution();
     7         System.out.println(s.findMin(num));
     8     }
     9     public int findMin(int[] num) {
    10         int begin = 0;
    11         int end = num.length-1;
    12         while(begin <= end){
    13             int mid = (begin + end)/2;
    14             if(mid == 0){
    15                 if(mid+1 < num.length && num[mid+1] < num[mid])
    16                     return num[mid+1];
    17                 else {
    18                     return num[0];
    19                 }
    20             }
    21             if(mid == num.length-1){
    22                 if(mid-1 >=0 && num[mid-1] > num[mid])
    23                     return num[mid];
    24                 else {
    25                     return num[0];
    26                 }
    27             }
    28             if(num[mid-1] > num[mid] && num[mid+1] > num[mid])
    29                 return num[mid];
    30             
    31             if(num[num.length-1] < num[mid])
    32                 begin = mid+1;
    33             else {
    34                 end = mid-1;
    35             }
    36             
    37         }
    38         return num[0];
    39     }
    40 }
  • 相关阅读:
    mongodb06---索引
    mongodb05---游标
    mongo04---基本查询
    mysql06---权限控制
    mysql05---游标
    使用 inotifywait的方式监控文件夹发生变化后自动执行脚本的方法
    ubuntu18.04 安装wine以及添加mono和gecko打开简单.net应用的方法
    Android之Socket群组聊天
    史上最完整的Android开发工具集合
    Android SurfaceView使用详解
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/4383815.html
Copyright © 2011-2022 走看看