• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coding everyday

            編程面試題 https://interview.codeplex.com

            C++博客 首頁 新隨筆 聯系 聚合 管理
              12 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks

            #面試編程題# 個不能少:有k個有序的數組,請找到一個最小的數字范圍。使得這k個有序數組中,每個數組都至少有一個數字在該范圍中。例如:1:{ 4, 10, 15, 24, 26 }2: { 0, 9, 12, 20 }3: { 5, 18, 22, 30 }。所得最小范圍為[20,24],其中,202中,223中,241中。

             

            剛看到這個問題的時候,感覺好難啊,這怎么才能找出來呢?有時候我覺得多看幾遍題目還是有好處的,讀書百遍其義自見啊。這個題目有幾個關鍵點:所有的數組是有序的、每個數組至少有一個數字出現在那個范圍里。

             

            圍繞著后面一點,我想,我們至少得維護一個kitem東西,然后每次從這個東西里面移掉一個放進去一個,尼瑪,這怎么感覺像是個隊列嘛。隊列?把最小的移掉,放進去它所在數組的后一個。咦,東西(隊列)里面是不是還是k個元素,并且來自k個數組?

             

            看上去可行,組織下思路。

             

            如果我們這里的數據結構用隊列顯然是不能滿足要求的,因為我們不能很快得出隊列中最小和最大的值,也就得不到范圍,那么如果隊列是有序的,是不是可以解決這個問題呢?簡單的推敲下,答案是肯定的。我們用priority_queue應該是可以解決這個問題的。

             

            1. 首先,我們把k個數組中的第一個元素都壓到p_q里面去,記下來最大的那個,因為最小的那個可以通過top()得到。只需要最大的那個就能得到range,對吧。如例中的:p_q: { 0, 4, 5 }, max_data: 5

             

            1. 然后,把第一個(最小的)彈出來,這個時候得到一個range,如果這個range比之前的小,用這個range。把彈出來的那個元素所在的數組的后一個壓進去,如果這個值比最大的那個大,把它標成最大的。如例中:0出來,9進去,p_q: { 4, 5, 9 } max_data: 9, range {0, 5}

             

            1. 重復步驟2,直到某一個數組遍歷完畢即可。為什么?顯而易見嘛,沒東西壓了啊。:D

             

            為了能比較好的處理,定義了一些輔助的數據結構:data就是被壓的那個東西,用來定義某個數組的某個元素,方便找它對應的下一個元素;range就是我們最終要求的范圍。

             

            有人會說,面試算法題,用庫里的數據結構不太好吧。這個我同意,有些算法題確實用庫里的東西,直接就秒了。如果在面試過程中,面試官也提出類似的質疑,那么我們自己實現個類似的數據結構總OK吧?這里我們也可以很輕松的實現一個滿足要求的數據結構啊。姑且稱之為,sorted_list


             1 template<typename T>
             2 struct node{
             3     T data;
             4     node *next;
             5 };
             6 
             7 template<typename T>
             8 class sorted_list {
             9 public:
            10     void push(const T& t);
            11     void pop();
            12     T top();
            13     // even we can provide both smallest & biggest value, by that way, we don't need to have max_data
            14     T bottom();
            15 private:
            16     node<T> head;
            17     node<T> tail;
            18 };

            部分代碼:
            get_shortest_range

            數據結構:
            data structures

            完整代碼

            附:出題人的分析。
            http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&appmsgid=10000075&itemidx=1&sign=46da65072c3062638e80f16599498508
            我覺得本質應該跟我的算法是一樣的吧。:D, :P
            posted on 2013-07-18 10:14 everyday 閱讀(311) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
            久久91精品国产91| 亚洲人成网站999久久久综合| 久久精品国产99久久久古代| 国产精品久久午夜夜伦鲁鲁| 久久99精品国产一区二区三区| 久久久久久国产精品美女| 尹人香蕉久久99天天拍| 国产亚洲精品自在久久| 欧洲性大片xxxxx久久久| 久久久久久亚洲AV无码专区| 亚洲国产精品久久久久久| 2021国产精品久久精品| 国产精品18久久久久久vr | 久久99精品久久久久久水蜜桃 | 无码人妻久久一区二区三区蜜桃| 午夜精品久久久久久影视777| 青草国产精品久久久久久| 国产精品日韩深夜福利久久| 77777亚洲午夜久久多人| 久久精品无码一区二区三区免费| 亚洲色婷婷综合久久| 亚洲欧美精品一区久久中文字幕| 国产精品18久久久久久vr| 久久久久亚洲精品日久生情 | 国产精品美女久久久久av爽 | 国产精品18久久久久久vr| 亚洲婷婷国产精品电影人久久| 成人妇女免费播放久久久| 中文字幕无码久久人妻| 久久久久97国产精华液好用吗| 久久精品中文字幕久久| 久久99国产精品久久99果冻传媒| 中文字幕热久久久久久久| 欧美性大战久久久久久| 久久久久久噜噜精品免费直播| 久久综合丁香激情久久| 国产精品天天影视久久综合网| av国内精品久久久久影院| 99久久精品日本一区二区免费| 久久精品中文闷骚内射| 国产精品久久自在自线观看|