[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

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.

  • 解题思路
    二分查找
  • 实现代码
/*************************************************************
    *  @Author   : 楚兴
    *  @Date     : 2015/2/8 17:17
    *  @Status   : Accepted
    *  @Runtime  : 10 ms
*************************************************************/
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int findMin(vector<int> &num) {
        int begin = 0;
        int end = num.size() - 1;
        int mid;
        while (begin + 1 < end)
        {
            mid = (begin + end) / 2;
            if (num[mid] > num[end])
            {
                begin = mid;
            }
            else
            {
                end = mid;
            }
        }
        return num[begin] < num[end] ? num[begin] : num[end];
    }
};

int main()
{
    Solution s;
    vector<int> nums;
    nums.push_back(4);
    nums.push_back(5);
    nums.push_back(6);
    nums.push_back(7);
    nums.push_back(1);
    nums.push_back(2);
    nums.push_back(3);
    cout<<s.findMin(nums)<<endl;
    system("pause");
}
  • 根据官方解答优化后的代码:
/*************************************************************
    *  @Author   : 楚兴
    *  @Date     : 2015/2/8 17:46
    *  @Status   : Accepted
    *  @Runtime  : 7 ms
*************************************************************/
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int findMin(vector<int> &num) {
        int begin = 0;
        int end = num.size() - 1;
        int mid;
        while (begin < end)
        {
            mid = (begin + end) / 2;
            if (num[mid] > num[end])
            {
                begin = mid + 1;
            }
            else
            {
                end = mid;
            }
        }
        return num[begin];
    }
};
目录
相关文章
|
7月前
|
Java
Leetcode 295. Find Median from Data Stream
在一个有序数组中找中位数,但需要支持再数组中添加新的元素。本来是有序里的,可以很轻易就查到中位数,但如果添加新数字后,不一定有序。如果先对数组排序,那代价就比较大了,每次排序时间复杂度O(n*log(n)),看discuss发现了一种很巧妙的解法,可以把添加数据的时间复杂度降低到O(log(n)) ,查询中位数O(1)。
27 0
|
7月前
Leetcode 4. Median of Two Sorted Arrays
题目描述很简单,就是找到两个有序数组合并后的中位数,要求时间复杂度O(log (m+n))。 如果不要去时间复杂度,很容易就想到了归并排序,归并排序的时间复杂度是O(m+n),空间复杂度也是O(m+n),不满足题目要求,其实我开始也不知道怎么做,后来看了别人的博客才知道有个二分法求两个有序数组中第k大数的方法。
17 0
|
7月前
Leetcode Find Minimum in Rotated Sorted Array 题解
对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数,注意,K有可能是0,也就是没有翻转。
24 0
|
10月前
|
JavaScript 前端开发 索引
Array类型【find】
Array类型【find】
65 0
Search in Rotated Sorted Array - 循环有序数组查找问题
Search in Rotated Sorted Array - 循环有序数组查找问题
53 0
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
60 0
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
|
7天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
15 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
6天前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
15 0
|
7天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
13 0