博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
美团面试题:寻找数组置尾操作的最小值
阅读量:5779 次
发布时间:2019-06-18

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

题目:
一个递增的整形数组,如今的操作是每次从数组的开头取出一个元素放在数组的末尾。连续n次这种操作后得到一个新的数组,
如今把这个数组给你,请求出最少移动的次数。
解析:
1 最easy想到的方法就是依次遍历这个数组,找到最小值的位置,这种时间复杂度就是O(n)。

2 考虑到事先是排好序的,所以我们能够使用二分查找法来实现这个操作,仅仅只是是这个二分查找法是传统二分查找法的变种。

这里我们仅仅要考虑下面3种情况。
<1>数组先递增再递减,中值大于左值,那么此时的最小值就处于数组的右半部。

<2>数组先递增再递减,中值小于左值,那么此时的最小值就处于数组的左半部。

<3>数组单调递增,此时的最小值就是数组的首元素。
3 程序实现
依据解析中2的思想,採取二分查找法的程序例如以下所看到的:

#include 
using namespace std;int getInvertNumber(int arr[],int nLength);void main(){ int arr[] = {1,2,3,4,5,6,7,8,9}; int brr[] = {1,3,4,6,8,9}; int sb = getInvertNumber(brr,sizeof(brr)/sizeof(brr[0])); cout<
<
arr[nLeft]) nLeft = nMid; else nRight = nMid; } return nLength -nMid-1;}

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

你可能感兴趣的文章
Workstation服务无法启动导致无法访问文件服务器
查看>>
我的友情链接
查看>>
JS中比较数字大小
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>
iOS: Block的循环引用
查看>>
变量声明提升1
查看>>
Magento XML cheatsheet
查看>>
haproxy mysql实例配置
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
JS prototype 属性
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>