zoukankan      html  css  js  c++  java
  • 153. Find Minimum in Rotated Sorted Array

    一、题目

      1、审题

      

      2、分析

        一个有序整数数组翻转成两段增序数组后,求出其中的最小的元素。

    二、解答

      1、思路:

        方法一、

          采用二分法求出最小元素。

        ①、若 nums[start] < nums[end] ,则数组已经有序;返回 nums[start];

        ②、若 nums[start] < nums[ mid ], 则 前半部分已经有序,则 start = mid + 1;

          否则 后半部分已经有序,则 end = mid;

        ③、最终,返回 nums[start];

        public int findMin(int[] nums) {
         
            int len = nums.length;
            if(len == 1)
                return nums[0];
            
            int start = 0, end = len - 1;
            while(start < end) {
                
                // 已经有序
                if(nums[start] <nums[end]) {
                    return nums[start];
                }
    
    //            int mid = (start + end) / 2;    // may be overflow
                int mid = start + ((end - start) >> 1);
                // 前半部分有序
                if(nums[start] < nums[mid]) 
                    start = mid + 1;
                // 前半部分无须;
                else 
                    end = mid;
                
            }
           
            return  nums[start]);
        }
        

      方法二、

        直接采用线性方法进行查找;

        public int findMin(int[] nums) {
            
            for (int i = 1; i < nums.length; i++) {
                if(nums[i] < nums[i - 1])
                    return nums[i];
            }
            
            return nums[0];
        }
  • 相关阅读:
    oo第四次作业总结
    oo第三次博客总结
    oo第二次博客总结
    oo第一次博客总结
    leetcode155-最小栈
    leetcode141-环形链表
    leetcode278-第一个错误的版本
    leetcode118-杨辉三角
    LeetCode21-合并两个有序列表
    LeetCode27-移除元素
  • 原文地址:https://www.cnblogs.com/skillking/p/9783141.html
Copyright © 2011-2022 走看看