LeetCode OJ 153. 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.
【题目分析】
一个有序的数组经过一个旋转操作,求出旋转后数组中的最小值。
【思路】
一个有序的数组经过旋转之后会发生什么呢,数据被切割成两段,然后后半段移动到了前半段,此时前半段和后半段都是一个增序序列,而且前半段中的任意一个数都比后半段中的数大。如下:
1. 遍历法
这个算法很简单,只要从前往后遍历,如果是递增的那么就继续向后,如果出现了一个断点,即在某一个位置元素比前一个元素小,那么我们就返回断点数据。这就是整个数组中最小的那个元素。如果断点靠前的话我们很快就能找到这个元素,如果断点靠后的话则需要遍历整个数组。因此我们可以设置两个指针,同时向后和向前遍历,距离断点较近的指针会率先找到最小元素。
2. 二分查找
我们可以采用二分查找来找到最小值,二分查找的时间效率更高。如何实现呢?在有序数组的二分查找算法中,我们的问题是找到我们给定的一个数值,但是在这个问题题中,我们要找到在数组中最小的那个值。我们知道旋转后数组被分成两部分,这两部分中间存在一个断点,找到了断点也就找到了最小值。当我们求中间值时,中间值可能落在断点前面或者断点后面。如果落在断点前面,那么中间值肯定比最左边的值要大,因为前半段数组中值还是递增的。如果落在的断点之后,那么中间值要比最左边的值小,因为前半段任意一个数都比后半段的要大。因此我们可以通过最左边值与中间值的大小关系来改变我们要查找的范围。如下例子:
【java代码1】
public class Solution {
public int findMin(int[] nums) {
int len = nums.length;
if(nums[0] < nums[len-1]) return nums[0];
int i = 0, j = len - 1; while(i < j){
if(nums[i] > nums[i+1]) return nums[i+1];
if(nums[j] < nums[j-1]) return nums[j];
i++; j--;
}
return nums[i];
}
}
【java代码2】
public class Solution {
public int findMin(int[] nums) {
int len = nums.length;
if(nums[0] < nums[len-1]) return nums[0];
int left = 0, right = len - 1; while(left < right){
int mid = left + (right - left)/2;
if(left == right - 1) return Math.min(nums[left], nums[right]);
if(nums[left] < nums[mid]) left = mid;
else right = mid;
}
return nums[left];
}
}
LeetCode OJ 153. Find Minimum in Rotated Sorted Array的更多相关文章
- 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)
[LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...
- LeetCode OJ 154. Find Minimum in Rotated Sorted Array II
Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...
- 【LeetCode】153. Find Minimum in Rotated Sorted Array (3 solutions)
Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you ...
- 【刷题-LeetCode】153 Find Minimum in Rotated Sorted Array
Find Minimum in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some p ...
- 【leetcode】153. Find Minimum in Rotated Sorted Array
Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example ...
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...
- 153. Find Minimum in Rotated Sorted Array - LeetCode
Question 153. Find Minimum in Rotated Sorted Array Solution 题目大意:给一个按增序排列的数组,其中有一段错位了[1,2,3,4,5,6]变成 ...
- LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法
Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...
- 【LeetCode】154. Find Minimum in Rotated Sorted Array II 解题报告(Python)
[LeetCode]154. Find Minimum in Rotated Sorted Array II 解题报告(Python) 标签: LeetCode 题目地址:https://leetco ...
随机推荐
- mybatis学习笔记三(关联关系)
学习mybatis的关联关系,主要注解在代码上,这里不做解释.配置文件一样的就不贴了 1.关联关系表创建(学生对应老师 多对一) 学生老师表 2.表对应的实体类 package com.home.en ...
- 两句话帮你彻底记住gdb之eXamining memory
对于刚学习Unix/Linux环境C编程的小朋友们或者写了很多所谓的C代码的老手们(其实很可能是机械程序员或者是伪程序员)来说,要记住gdb的eXaming memory的语法其实是相当不容易的,如果 ...
- 导入spring源码到eclipse
1.1安装Gradle 可以从http://www.gradle.org/downloads页面下载Gradle.下载后将文件解压到指定目录,我放在D:\软件\gradle-3.3,然后设置环境变量. ...
- python3 流程控制
表达式if ... else >>> if 3 > 4: ... print('False') ... else: ... print('True') ... True 表达式 ...
- jmeter之jtl文件解析
我们知道命令行的方式执行完成jmeter后,会生成jtl文件,里面打开后就是一行行的测试结果, <httpSample t="1" lt="1" ts=& ...
- 简单的python协同过滤程序
博主是自然语言处理方向的,不是推荐系统领域的,这个程序完全是为了应付大数据分析与计算的课程作业所写的一个小程序,先上程序,一共55行.不在意细节的话,55行的程序已经表现出了协同过滤的特性了.就是对每 ...
- trove,测试,db小解析
# Copyright 2014 Tesora Inc.# All Rights Reserved.## Licensed under the Apache License, Version 2.0 ...
- Dubbo服务的搭建与使用
官方地址Dubbo.io Dubbo 主要功能 高并发的负载均衡,多系统的兼容合并(理解不深,不瞎掰了) Dubbo 主要组成有四部分 Zookeeper(服务注册中心) Consumer(服务消费方 ...
- [Q]AdobePDF虚拟打印机自动保存PDF
使用打图精灵打印时,选择“Adobe PDF”虚拟打印机打印(注意不选择“打印到文件”),每张图纸都会弹出一个保存对话框,如何避免? 从 操作系统->控制面板->硬件和声音->设备和 ...
- 笔记本开临时Wifi
笔记本开临时热点 1. netsh wlan set hostednetwork mode=allow ssid=xianzhonPC key=123456782. 打开共享和网络—更改适配器设置—本 ...