題目:給乙個陣列例如a = ,前面部分是按序遞增,後面部分是按序遞減,求該陣列的最大值。
思路分析:對於給定一組數的求最大值問題,可以使用簡單插入,簡單選擇,冒泡,堆排序對其進行一次操作,可以求出最大值。經分析,時間複雜度為o(n).對陣列特徵分析,陣列是「中間大,兩邊小」特徵,部分有序,可以考慮使用折半查詢演算法進行處理。
基於折半查詢的演算法可以根據比較元素個數有兩個解決辦法,這樣時間複雜度可以降低到logn。具體如下:
方法一:當中間元素和右邊相鄰元素比較時,如果比右邊大,則要查詢最大值在中間位置和其左邊位置的區間內,右邊界設定為中間值,反之在中間值位置和其右邊邊界的區間,左邊界設定為中間值位置。如此迴圈,當邊界差值為1時對應的中間值即為所求最大值。實現**如方法一。
int fun(int a, int n)
return a[mid] ;
}
方法二:考慮用中間值和左右元素分別進行比較,當中間元素比左邊元素大而比右邊元素大時,中間元素即可所求最大值;若中間元素比左邊大而左邊小時,所求最大值在中間值和其右邊區間,左邊界位置變為中間值位置;若中間元素位置比左邊小二比右邊大時候,最大值在左邊界位置到中間值位置的區間,此時右邊界變為中間值位置。具體實現如下:
int fun2(int a, int n)
}
美團電話面試總結
1.資料庫優化 2.hashtable與hashmap區別 3 spring mvc流程 4 mongodb與oracle區別 5 常用資料結構,arraylist與linkedlist區別 6 分布式鎖,樂觀鎖 7 事務管理,sessionfactory 8 還做過什麼與網際網路相關的事情 9 s...
美團面試經歷
昨天參加了了美團的面試,二面被掛掉,被掛掉必然不爽,但是總結一下才是王道 之前阿里二面血跪,遇到的問題都是什麼 你是怎麼學習前端的 遇到問題怎麼解決的 我回答的不夠好,個人認為回答沒有體現出自己的思路,當然,有可能是一面的面試本來就不好,二面想看看潛力如何,結果還沒潛力,自然掛掉 然後就是一道演算法...
美團面試經歷
昨天參加了了美團的面試,二面被掛掉,被掛掉必然不爽,但是總結一下才是王道 之前阿里二面血跪,遇到的問題都是什麼 你是怎麼學習前端的 遇到問題怎麼解決的 我回答的不夠好,個人認為回答沒有體現出自己的思路,當然,有可能是一面的面試本來就不好,二面想看看潛力如何,結果還沒潛力,自然掛掉 然後就是一道演算法...