給出一個整數數組。您必須輸出最大範圍,以便範圍內的所有數字都存在於數組中。數字可能以任何順序出現。例如,假設該陣列是查找數組中的連續範圍
{2, 10, 3, 12, 5, 4, 11, 8, 7, 6, 15}
在這裏,我們找到兩個(非平凡)的範圍爲其中在這些範圍內的所有整數是存在於陣列,即[2,8]和[10,12]英寸其中[2,8]是較長的一個。所以我們需要輸出。
當我被給出這個問題時,我被要求在線性時間內做這個,而不用任何排序。我認爲可能有一個基於散列的解決方案,但我無法想出任何東西。
這是我的一個解決方案的嘗試:
void printRange(int arr[])
{
int n=sizeof(arr)/sizeof(int);
int size=2;
int tempans[2];
int answer[2];// the range is stored in another array
for(int i =0;i<n;i++)
{
if(arr[0]<arr[1])
{
answer[0]=arr[0];
answer[1]=arr[1];
}
if(arr[1]<arr[0])
{
answer[0]=arr[1];
answer[1]=arr[0];
}
if(arr[i] < answer[1])
size += 1;
else if(arr[i]>answer[1]) {
initialize tempans to new range;
size2=2;
}
else {
initialize tempans to new range
}
}
//I have to check when the count becomes equal to the diff of the range
我停留在這部分......我想不出有多少tempanswer []應該使用數組。
確保..That應該幫助 – garima 2011-03-24 06:04:49
的問題是措辭的方式是有點混亂,但我現在明白了。您想要查找數組中最大的一組連續數字。在你的例子中,「2,3,4,5,6,7和8」是數組中的值,但「1和9」不是,所以你的候選結果之一是[2-8] 。 – 2011-03-24 06:08:34