剑指Offer 11.旋转数组的最小数字

剑指Offer 11

分析

输入:一个递增数列,旋转之后的数组,
输出:该数组中的最小元素


思路–1

不用理会输入数组的顺序,直接寻找最小的元素,然后输出。


思路–2

既然题目给我们的是一个旋转过后的递增数组,我们也可以旋转回去
然后输出该数组中的第一个元素

其实这样的操作麻烦了一下, 因为当你找到旋转的位置时,就已经找到最小的元素。(我只是想回顾一下原地旋转数组的算法)

 public int minArray(int[] numbers) {
         int min = 0 ;
		 
		/**
		*旋转后的数组,大致的趋势是递增的,找到该数组不在递增的位置,既是
		*旋转的位置
		*/
		 for(int i=0;i<numbers.length;i++)      
		 {
			 if(numbers[min]>numbers[i])
				 min = i;
		 }
		 
		 //先将前半段旋转一次
		 conver(0,min-1,numbers);    
		 //然后将后半段旋转一次
         conver(min,numbers.length-1,numbers);
         //最后将整个数组旋转一次,然后得到原始的数组
		 conver(0,numbers.length-1,numbers);
		 //返回第一个元素
		 return numbers[0];
    }

//原地旋转数组的算法
 public static void conver( int index,int end,int [] numbers) 
	 {
		 int i = index;
		 int j = end;
		 
		 while(i<j)
		 {
		 int temp = numbers[i];
		 numbers[i] = numbers[j];
		 numbers[j] = temp;
		 i++;
		 j--;
		 }
	 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值