這個題目是比較簡單的。很直接的,對於每乙個a[j],如果知道前面的元素中最小的元素min,則此時相差最大為a[j]-min。則,假設有乙個陣列m,m[j]表示[0,j-1]中最小的元素。這個遍歷一邊a,就可以完成構造m。再遍歷一邊陣列,就可以找到相差最大的。我們舉個例子看看m,以及是否有改進的空間。
假設a=。通過一次遍歷,得到m如下:11
111
這是乙個極端的例子,但確實給了我們乙個改進的方向,就是並不需要乙個陣列儲存最小值,而只需要乙個變數即可。
上面的例子不明顯,假定a=,過程如下:
ja[j]
最小值m
a[j]-m02
2015
2321
1033
1244
13最終得到相差最大為3.這個例子,可以找到兩個i,j。
**如下:
int maxdiff(vector& data)
return res;
}
這個題目,如果有的同學給出陣列c,c[j]表示[0,j]中的最小值;陣列b表示[j+1, n-1]中的最大值;這兩個陣列遍歷兩次可以得到,然後,再遍歷一次a,對於每乙個i,b[i]-c[i]中最大的,就是最終的值。這個思路也是ok的,只不過比我們開始提到的,更加一些,可以通過觀察c,b的變化,找到規律,進行化簡。
待字閨中之巧妙排序分析
排序只有1,2,3三個元素的陣列,不能統計1,2,3的個數。分析 這個題目,儘管也是排序,但卻不能使用快速排序的方法。只有三個元素,如果時間複雜度仍舊是o nlogn 顯然不是最好的。那就可以使用線性的排序演算法,例如計數排序,可是題目中要求,不能夠對1,2,3進行統計個數。那該如何處理呢?請大家看...
待字閨中之巧妙排序分析
排序僅僅有1。2,3三個元素的陣列。不能統計1,2。3的個數。分析 這個題目,雖然也是排序,但卻不能使用高速排序的方法。僅僅有三個元素,假設時間複雜度仍舊是o nlogn 顯然不是最好的。那就行使用線性的排序演算法,比如計數排序。但是題目中要求,不可以對1,2,3進行統計個數。那該怎樣處理呢?請大家...
待字閨中之兄弟數字分析
給定乙個數x,他的兄弟數y定義為 是由x中的數字組合而成。而且y是大於x的數中最小的。比如,38276的兄弟數字為38627。給定x,求y。分析 這個題目當然有暴力的方法。列出全部的排列組合。然後然後找到大於x中,最小的y。即。找到兄弟數字。那有沒有更好的方法呢?不想對全部情況進行窮舉。就要想辦法,...