C++中求旋轉(zhuǎn)數(shù)組中的最小數(shù)字(經(jīng)典面試題)
面試題:旋轉(zhuǎn)數(shù)組的最小數(shù)字
題目:把一個(gè)數(shù)組的最開始的若干個(gè)元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。輸入一個(gè)遞增數(shù)組的旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1.
算法:
(1)當(dāng)輸入的旋轉(zhuǎn)數(shù)組非法時(shí):處理!
(2)當(dāng)輸入的旋轉(zhuǎn)數(shù)組正常時(shí),index1 = 0;index2=length-1:
a:如果arry[index1] <arry[index2]時(shí):說(shuō)明數(shù)組為原數(shù)組,并沒有進(jìn)行旋轉(zhuǎn);
b:如果arry[index1] >= arry[index2]時(shí),middle = (index1+index2)/2:
b.1如果arry[index1] >arry[middle],index2 = middle;
b.2如果arry[index1] <= arry[middle],index1 = middle;
b.3 如果arry[index1] = arry[middle] = arry[index2],遍歷找到最小值。
代碼:
Min_RotateArray.hpp
#pragma once
#include<iostream>
using namespace std;
int Min_RotateArray(int arry[],int size)
{
if(arry == NULL || size <= 0)
{cout<<"參數(shù)輸入錯(cuò)誤!??!"<<endl;}
int min = 0;
int index1 = 0;
int index2 = size-1;
int middle = (index1+index2)/2;
if(arry[0] < arry[size-1])
return arry[0];
while(arry[index1] >= arry[index2])
{
if(index2-index1 == 1)
{
min=index2;
break;
}
middle = (index1+index2)/2;
if(arry[index1] <= arry[middle])//arry[middle]還在第一個(gè)遞增序列中
{
index1 = middle;
}
else
{
if(arry[index1] >= arry[middle])//arry[middle]在第二個(gè)遞增序列中
{index2 = middle;}
if(arry[index1] == arry[index2] && arry[index1] == arry[middle])
{
for(int i=0;i<size;++i)
{
if(arry[min]>arry[i])
{
min = i;
break;
}
}
}
}
}
return arry[min];
}
Min_RotateArray.cpp
#include"Min_RotateArray.hpp"
int main()
{
int arry[] = {3,4,5,1,2};
int size = sizeof(arry)/sizeof(arry[0]);
int min = Min_RotateArray(arry,size);
cout<<"The min is:"<<min<<endl;
system("pause");
return 0;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C++實(shí)現(xiàn)動(dòng)態(tài)煙花效果
這篇文章主要介紹了利用C++實(shí)現(xiàn)的放煙花程序,用到了EGE圖形庫(kù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下2022-01-01
詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問(wèn)權(quán)限定為private
這篇文章主要介紹了詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問(wèn)權(quán)限定為private的方法,文中還解釋了構(gòu)造函數(shù)與虛函數(shù)的區(qū)別,需要的朋友可以參考下2016-03-03
mfc入門教程之實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器
這篇文章主要介紹了mfc入門教程,手把手教你如何開發(fā)一個(gè)簡(jiǎn)單的計(jì)算器,需要的朋友可以參考下2019-04-04
C語(yǔ)言結(jié)構(gòu)體(struct)的詳細(xì)講解
C語(yǔ)言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
一文教你Qt如何操作SQLite數(shù)據(jù)庫(kù)
Sqlite 數(shù)據(jù)庫(kù)作為 Qt 項(xiàng)目開發(fā)中經(jīng)常使用的一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),可以說(shuō)是兼容性相對(duì)比較好的數(shù)據(jù)庫(kù)之一。本文為大家介紹了Qt操作SQLite數(shù)據(jù)庫(kù)的具體方法,希望對(duì)大家有所幫助2023-03-03
Visual Studio新建類從默認(rèn)internal改為public
本文將介紹如何將Visual Studio中的internal修飾符更改為public,以實(shí)現(xiàn)更廣泛的訪問(wèn)和重用,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
C++實(shí)現(xiàn)LeetCode(107.二叉樹層序遍歷之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(107.二叉樹層序遍歷之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

