您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關利用C++怎么求旋轉數組中的最小數字,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
題目:把一個數組的最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個遞增數組的旋轉,輸出旋轉數組的最小元素。例如數組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數組的最小值為1.
算法:
(1)當輸入的旋轉數組非法時:處理!
(2)當輸入的旋轉數組正常時,index1 = 0;index2=length-1:
a:如果arry[index1] <arry[index2]時:說明數組為原數組,并沒有進行旋轉;
b:如果arry[index1] >= arry[index2]時,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<<"參數輸入錯誤!!!"<<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]還在第一個遞增序列中 { index1 = middle; } else { if(arry[index1] >= arry[middle])//arry[middle]在第二個遞增序列中 {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; }
關于利用C++怎么求旋轉數組中的最小數字就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。