尋找乙個陣列中的最大和最小數

2022-09-23 16:33:16 字數 1172 閱讀 6795

有乙個求陣列中最大和最小數的題目,基本的思路是遍歷一遍陣列,然後每個乙個元素都和最大值和最小值比較,時間複雜度是2(n-1)或2n。

比較簡單的一種減少複雜度的方法是把陣列的元素兩兩分組比較,然後較大的數和max比較,較小的數和min比較,這種實現方法的時間複雜度是1.5n。

還有一種是採用分治法,比較次數也是1.5n,思路是將陣列一分為二,分別獲取兩個子陣列的最大和最小值,然後進行取兩個子陣列中較小的最小值和較大的最大值。

o(n) = (n/2 + n/4 + … + n/2^(log2(n))) = 3n/2 ?

#include

void max_min(int a, int begin, int end, int *max, int *min)

int l_max, r_max;

int l_min, r_min;

max_min(a, begin, begin + (end - begin) / 2, &l_max, &l_min);

max_min(a, begin + (end - begin) / 2 + 1, end, &r_max, &r_min);

*max = l_max > r_max ? l_max : r_max;

*min = l_min < r_min ? l_min : r_min;

}int main() ;

int len = sizeof(array) / sizeof(int);

int max = array[0];

int min = array[0];

for (int i = 1; i < len; ++i) else if (array[i] < min)

}printf("max:%d min:%d\", max, min);

int start = -1;

if (len & 0x1) else

for (int i = start; i < len; i+=2) else if (array[i] < array[i + 1])

}printf("max:%d min:%d\", max, min);

max_min(array, 0, len - 1, &max, &min);

printf("max:%d min:%d\", max, min);

return 0

}

求乙個陣列的連續子陣列的最大和

輸入乙個整型陣列,陣列中有正有負。陣列中的乙個或多個整數組成乙個子陣列。求所有子陣列的和的最大值,要求時間複雜度為o n 首先,根據題意,可能我們都會想到列舉陣列中所有的子陣列的和。我們都知道乙個長度為n的陣列,總共有n n 1 2個子陣列。計算出所有子陣列的和需要o n 2 時間。我們先來舉例分析...

如何尋找乙個數值陣列中的最大元素?

場景 math.max 返回給定的一組數字中的最大值,如果是數值陣列,怎麼從陣列中返回最大值?2.使用最新的擴充套件語句展開語法 math.max arr const obj function test args const newfn test.bind obj,靜態引數1 靜態引數2 newfn...

乙個陣列有 N 個元素,求連續子陣列的最大和

輸入描述 輸入為兩行。第一行乙個整數n 1 n 100000 表示一共有n個元素 第二行為n個數,即每個元素,每個 整數都在32位int範圍內。以空格分隔。輸出描述 所有連續子陣列中和最大的值。示例1 輸入3 1 2 1輸出3 我們用pos代表即將要加的數,sum從0開始一直 pos,並每次進行判斷...