這樣是會超時的。。。因為迴圈了很多遍
for (i = 0; i < n; i++)
} if (flag == 0)
}} if (flag == 0)
}
改了一下
第 2 行是空格分隔的 n 個不同的正整數,每個數不超過 10^9。演算法思想:
輸入n個數,定義兩個陣列 leftmax, rightmin。leftmax[i]儲存a[i]左邊的數的最大值;rightmin[i]儲存a[i]右邊的數的最小值
第乙個數的leftmax[0] = 0
最後乙個數的rightmin[0] = 1000000000
然後再迴圈一遍如果 a[i] > leftmax[i] && a[i] < rightmin[i],就是主元!!
這樣只需迴圈3遍!
#include#includeusing namespace std;
#define maxsize 100100
#define inf 1000000000 //定義乙個
int main()
leftmax[0] = 0;
//左邊第乙個數的leftmax的是自己,題目中給出的是不同的數
for (i = 1; i <= n-1; i++)
rightmin[n - 1] = inf;
for (i = n - 2; i >= 0; i--)
for (i = 0; i < n; i++)
} cout << sum << endl;
sort(result, result + sum);
for (i = 0; i < sum; i++)
} cout << endl; //測試點3---格式錯誤----醉了
return 0;
}
1045 快速排序 (25 分)
著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,排列是1 3 2 4 5。則 ...
1045 快速排序 (25 分
1045 快速排序 25 分 著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,...
1045 快速排序 25分
著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,排列是1 3 2 4 5。則 ...