美团面试题:寻找数组置尾操作的最小值「建议收藏」

美团面试题:寻找数组置尾操作的最小值

大家好,又见面了,我是全栈君。

题目:

一个递增的整形数组,如今的操作是每次从数组的开头取出一个元素放在数组的末尾。连续n次这种操作后得到一个新的数组,

如今把这个数组给你,请求出最少移动的次数。

解析:

1 最easy想到的方法就是依次遍历这个数组,找到最小值的位置,这种时间复杂度就是O(n)。

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

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

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

<3>数组单调递增,此时的最小值就是数组的首元素。

3 程序实现
依据解析中2的思想,採取二分查找法的程序例如以下所看到的:

#include <iostream>
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<<sb<<endl;


}


int getInvertNumber(int arr[],int nLength)
{
	int nLeft = 0;
	int nRight = nLength-1;
	int nMid;
	if(arr[nLeft]<arr[nRight])
		return 0;
	while(nLeft<nRight)
	{
		nMid = ( nLeft + nRight ) / 2;
		if(arr[nMid]>arr[nLeft])
			nLeft = nMid;
		else
			nRight = nMid;
	}


	return nLength -nMid-1;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116511.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OllyDBG 激活成功教程入门教程「建议收藏」

    OllyDBG 激活成功教程入门教程「建议收藏」原链接:https://www.cnblogs.com/ECJTUACM-873284962/p/7653285.html一、OllyDBG的安装与配置OllyDBG版的发布版本是个ZIP压缩包,只要解压到一个目录下,运行OllyDBG.exe就可以了。汉化版的发布版本是个RAR压缩包,同样只需解压到一个目录下运行OllyDBG.exe即可:OllyDBG中各个窗口的功能如上图。简单解释一下各个窗口的功能,更详细的内容可以参考TT小组翻译的中文帮助:反汇编窗口:显示被调试

    2022年9月21日
    0
  • phpMyAdmin安装教程

    phpMyAdmin安装教程phpmyadmin是一款mysql数据库管理工具,是由php编写的,可以通过互联网控制和操作mysql,通过phpmyadmin可以完全对数据库进行操作,例如建立、复制/删除数据等等。可以管理整个MySQL服务器(需要超级用户),也可以管理单个数据库,为了实现后一种,你将需要合理设置MySQL用户,他只能对允许的数据库进行读/写,那要等到你看过MySQL手册中相关的部分。

    2022年6月1日
    27
  • HtmlDocument.InvokeScript 方法 (String, Object[])「建议收藏」

    HtmlDocument.InvokeScript 方法 (String, Object[])「建议收藏」HtmlDocument.InvokeScript方法(String,Object[]) 這個方法和.net1.2的execScript方法相似的。execScript在2.0中已經取消了。注意:此方法在.NETFramework2.0版中是新增的。执行在HTML页面中定义的动态脚本函数。命名空间:System.Windows.Forms程序集:

    2022年7月19日
    13
  • pki的应用包括哪些技术_新技术应用情况

    pki的应用包括哪些技术_新技术应用情况一、概述公钥基础设施(PublicKeyInfrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、PKI应用等,并对CA的开发做了简要分析。本文对PKI,特别是CA的开发、应用和普及具有一定的促进作用。二、PKI技术的信任服务…

    2022年10月26日
    0
  • c++开源库rapidxml介绍与示例

    c++开源库rapidxml介绍与示例官方地址:http://rapidxml.sourceforge.net/官方手册:http://rapidxml.sourceforge.net/manual.html也可以在github上下载到别人上传的rapidxml:https://github.com/dwd/rapidxml1.头文件一般我们用到的头文件只有这三个#include”rapidxml/rapidxml.hpp”

    2022年7月17日
    15
  • iOS锁屏时钟_ios时钟怎么调

    iOS锁屏时钟_ios时钟怎么调当设备在一定时间内没有触控动作,iOS会锁住屏幕。但有些应用程序是不需要锁住屏幕的,比如游戏,视频这类应用。可以通过设置UIApplication的idleTimerDisabled属性来指定iOS是否锁频://禁用休闲时钟[[UIApplicationsharedApplication]setIdleTimerDisabled:YES]; //也可以使用这种语法

    2022年9月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号