如何解决C++中查找与排序的面试题
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关如何解决C++中查找与排序的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。题目:旋转数组的最小数字把一个数组最开始的若干个元素搬到
千家信息网最后更新 2025年11月07日如何解决C++中查找与排序的面试题
这篇文章将为大家详细讲解有关如何解决C++中查找与排序的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
题目:
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,输入一个递增排序的数组的一个旋转,输出旋转数字的最小元素。
例:{2,3,4,0,1}是{0,1,2,3,4}的旋转,该数组最小值为0
程序1.0
失败的程序,从头遍历一遍,时间复杂度O(N),这个思路没有利用输入旋转数组的特性,随便实现了但是却是失败的
int MinNum(int* array, int length){ int cur = array[0]; for (int i = 1; i < length; i++) { if (array[i]程序2.0
方法类似于二分查找
int MinNum(int* array, int length){ assert(array); assert(length>0); int left = 0; int right = length - 1; int mid = left;//初始化为0,这样若旋转了0个元素则直接返回 while (array[left] >= array[right])//数组为旋转后数组 { if (right - left == 1) { mid = right; break; } mid = (left + right) / 2; if (array[mid] >= array[left]) { left = mid; } else if (array[mid] <= array[right]) { right = mid; } } return array[mid];}//在第一次检测时发现怎么跑都是返回的第一个元素的值,后来检测时发现是在while循环块中在定义mid时在前面不小心加了个int,这使得这个mid为这个块的局部变量,出了这个循环后就被丢弃程序3.0
在2.0中有考虑不完善的地方,若数组为{1,0,1,1,1}或者为{1,1,1,0,1},其左右和中间都是1,无法移动两个指针来缩小查找范围,因而不得不采取顺序查找的方法
int MinInOrder(int *array,int left,int right){ int ret = array[left]; for (int i = left + 1; i <= right; i++) { if (ret>array[i]) { ret = array[i]; } } return ret;}int MinNum(int* array, int length){ assert(array); assert(length > 0); int left = 0; int right = length - 1; int mid = left; while (array[left] >= array[right]) { if (right - left == 1) { mid = right; break; } mid = (left + right) / 2; if (array[left] == array[right] && array[left] == array[mid]) { return MinInOrder(array, left, right); } if (array[mid] >= array[left]) { left = mid; } else if (array[mid] <= array[right]) { right = mid; } } return array[mid];}测试
void test(){ int a[10] = { 8,9,10,11,1,2,3,4,5,6 }; cout<关于"如何解决C++中查找与排序的面试题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
数组
元素
程序
排序
最小
篇文章
C++
数字
方法
更多
循环
检测
输入
不错
复杂
实用
两个
从头
内容
变量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
集成电路和软件开发的股票
北京回收sun服务器
兵器少女有几个服务器
数据库飞机售票管理
关于网络安全防范
网络安全层次体系包括网络层
我的世界国际版服务器有中奖吗
网络安全教案带图片
小康数据库辽宁
网络安全主要事项
软件开发费长期待摊费用
安徽一安网络技术有限公司
打开数据库的语法格式是
游卡网络安全怎么转让
广州计算机软件开发多少钱
代理服务器群
网络安全护航成长主题
无人便利柜零售软件开发
2018网络安全周宣传资料
斗战神数据库
网络安全图画简单又好看
搜小说软件开发
世界数据库众生相
一个服务器电源能带两个主板吗
阳泉软件开发大概费用
个单片机软件开发的有提成吗
ads2021服务器无法打开
网络技术和数字媒体
什么作业学数据库
navicat链接数据库