設計思路:
主要是降低時間複雜度
以主元的定義,暴力判斷,時間複雜度 o(n*n)
利用陣列記錄每個數前面的最大值,後面的最小值,時間複雜度 o(n)
最初解題時很簡單的想到,在輸入時記錄每個數前面的最大值,然後就想怎麼記錄每個數後面的最小值,因為資料是從前往後讀取,記錄最小值的方法越想越亂,最後看到大佬的**才反應過來,資料都存好了,從後往前再讀一次就是最小值(囧,想撞死在鍵盤上~~)
編譯器:c (gcc)
#include
intmain()
for(i = n -
1, min = i; i >=
0; i--
)for
(i =
0; i < n; i++
)else
}printf
("%d\n"
, count)
;for
(i =
0; i < n && count; i++)}
printf
("\n");
return0;
}
1045 快速排序
如果按照題目正常寫的話就只有第乙個點能通過,結果超時,後來觀察到可以和排好序的陣列比較,數字相等的時候才能算,但是也有一半的點是不能通過的,後來,想到了如果有兩個相同的數字,那麼在排序的過程中,兩個數字就是挨著的,那麼就沒辦法與未排序的陣列一一對應了,這樣就判斷一下,需要判斷的數字是否比之前的最大值...
1045 快速排序
著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 排列是1 3 2 4 5。則 1 的左...
1045 快速排序
1045 快速排序 25 分 著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 排列是1 3 2...