博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer_旋转数组的最小数字
阅读量:2107 次
发布时间:2019-04-29

本文共 1063 字,大约阅读时间需要 3 分钟。

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
知识点
数组、二分查找
思路
最开始看这道题时纠结了很久题意,没懂考的点是什么,后来看了题解才知道,可以用暴力做出来,也可以根据题目给的规律用二分查找法做出来。
方一、暴力解出
方二、利用二分查找以及题目特性,已知旋转后可分为两个非递减数组;

  1. 当mid>lo时,说明此时mid在左数组,lo改为mid+1;
  2. 当mid<hi时,则说明在右数组,hi改为mid;
  3. 当midlo且hi时,lo++;

代码

import java.util.ArrayList;public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length<=0){
return 0; } int min = 999999999; for(int i=0;i
import java.util.ArrayList;public class Solution {
public int minNumberInRotateArray(int[] array) {
int i = 0, j = array.length - 1; while (i < j) {
if (array[i] < array[j]) {
return array[i]; } int mid = (i + j) >> 1; if (array[mid] > array[i]) {
i = mid + 1; } else if (array[mid] < array[j]) {
j = mid; } else i++; // 巧妙避免了offer书上说的坑点(1 0 1 1 1) } return array[i]; }}

转载地址:http://cffef.baihongyu.com/

你可能感兴趣的文章
微信小程序-调用-腾讯视频-解决方案
查看>>
giuhub搭建及常用操作
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
详细介绍Oracle sqlplus命令
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>