博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刷题笔记(14)--旋转数组的最小数字
阅读量:3958 次
发布时间:2019-05-24

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

在这里插入图片描述

class Solution {
public int minArray(int[] numbers) {
int left = 0; int right = numbers.length - 1; // 利用二分查找的思想 使得left 和 right 落在最中间的两个位置,取其中最小的值 while(right - left > 1){
// 对左右去重 while(right - left > 1 && numbers[right-1] == numbers[right]){
right--; } while(right - left > 1 && numbers[left] == numbers[left+1]){
left++; } int mid = left + (right - left) / 2; /* 将 mid 和 right 位置的元素做比较。正常是right的大于mid, 这里是找最小的,所以将left和right往最小范围移动。 这里能用 mid 和 left 比较么?旋转数组中min的出现情况有三种。 5 1 2 3 4 : left是5,mid 是2,right是4;(旋转后min在mid的左边)mid
left, mid
left, mid>right 当处于第2和3情况是,mid都是大于left,其操作却不能统一,2需要 right = mid; 3需要left = mid;所以不用mid和left比较。 如果对mid和right比较,1、2两种情况mid都是小于right的,可以统一操作right = mid;当mid大于right时left = mid即可。 因此使用mid和right比较可以减少if判断的条件,统一操作。 */ if(numbers[mid] < numbers[right]){
right = mid; }else{
left = mid; } } return Math.min(numbers[left],numbers[right]); }}

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

你可能感兴趣的文章
Word生成目录
查看>>
JSP彩色验证码源程序编写
查看>>
java操作Excel、PDF文件
查看>>
java 获得系统变量
查看>>
window.event对象用法讲解
查看>>
jive license保护原理
查看>>
java des加密
查看>>
struts&hibernate&spring例子
查看>>
inno使用教程
查看>>
网吧系统母盘制作(系统分区整体考虑优化配置篇)
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
Quartz 使用手记 --转
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
MySQL用户授权
查看>>
mysql忘记密码怎么办?~
查看>>
MySQL修改密码方法总结
查看>>
怎么将我的硬盘屏蔽
查看>>
关于MySQL select into 和 SQLServer select into
查看>>