如何解决C++中查找与排序的面试题
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章将为大家详细讲解有关如何解决C++中查找与排序的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。题目:旋转数组的最小数字把一个数组最开始的若干个元素搬到
千家信息网最后更新 2025年02月22日如何解决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安全错误
数据库的锁怎样保障安全
数据库可以更改列名么
关闭自动播放网络安全
梯度结构数据库表设计
大学数据库系统原理期末考
软件开发人员最爱的语言
中文科技刊数据库
软件开发个软件测试
网络安全的基本属性范围包括
数据库性能管理哪家公司好
做软件开发去华为和互联网
sql数据hana数据库
软件开发专业买什么电脑
网络技术与应用起源于
擎天软件的数据库文件是哪个
网络安全论文黑客
陈家迁计算机网络技术
比较矢量数据和栅格数据库
魔兽日常任务数据库
网络安全法文件
网络安全知识的
手机软件开发有哪些岗位
上海宝莱特网络技术有限公司
数字基建网络安全
浚县天气预报软件开发
服务器主板开机保护
软件开发 免费简历模板
关系型数据库 嵌套表
数据库大小写转换的函数
软件开发流程与方法的书籍
网络安全工作检查考核机制