• <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 閱讀(310) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
            亚洲精品乱码久久久久久不卡| 亚洲日韩中文无码久久| 亚洲日本va中文字幕久久| 久久久久亚洲精品无码网址| 伊人久久大香线蕉影院95| 欧美一区二区精品久久| 久久99精品久久久久久hb无码 | 久久久久99精品成人片试看| 热99RE久久精品这里都是精品免费| 久久人人爽人爽人人爽av | 99热成人精品免费久久| 久久久九九有精品国产| 91精品免费久久久久久久久| 91精品国产高清久久久久久91| 日本一区精品久久久久影院| 狠狠色伊人久久精品综合网| 欧美综合天天夜夜久久| 欧美与黑人午夜性猛交久久久| 久久精品国产精品亚洲| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久久国产精品免费无码 | 久久精品亚洲精品国产色婷| 久久精品国产免费| 久久男人中文字幕资源站| 久久亚洲精品国产精品婷婷| 日日噜噜夜夜狠狠久久丁香五月| 久久久精品人妻一区二区三区蜜桃| 久久电影网一区| 久久九色综合九色99伊人| 思思久久好好热精品国产| 久久国产热精品波多野结衣AV| 久久免费小视频| 伊人伊成久久人综合网777| 久久无码人妻一区二区三区午夜| 久久精品午夜一区二区福利| 久久久久亚洲av成人无码电影| 伊人久久大香线蕉综合影院首页 | 亚洲国产成人精品女人久久久| 久久久久久精品久久久久| 9191精品国产免费久久| 亚洲va国产va天堂va久久|