青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coding everyday

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

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

2013年8月29日 #

#面試題#給定數組A,大小為n,數組元素為1n的數字,不過有的數字出現了多次,有的數字沒有出現。請給出算法和程序,統計哪些數字沒有出現,哪些數字出現了多少次。能夠在O(n)的時間復雜度,O(1)的空間復雜度要求下完成么


想了好久,都沒能想出來算法,我覺得是不是自己走進死胡同了,決定再看一遍題目,這一遍果然讓我發現,原來自己真的理解錯了題目的意思,我一開始以為要輸出多次出現的數字對應的數字,所以一直都繞不過來彎。

所以有時候面試過程中,重新確認題目還是有必要的,有時候面試緊張會誤解題目意思,當自己沒有思路的時候,可以嘗試確認題意,以來可以緩解一下自己的心情,再者可能面試官會跟你有更多的互動,增加好感。


確定了題意,基于之前的思考,我的算法是這樣的遍歷一遍數組,用-2,-1,0來表示沒有出現,出現一次,出現多次,如果當前節點大于0,目標節點為它對應的值,當前置為-2,若小于0,加一但不要超過0。算法需要一個遞歸函數(用來遞歸處理目標節點一直大于0的情況,即未處理過的)和一個遍歷的函數。最終0即為多次出現,-1出現1次的,-2沒有出現。因為有2個前提這個算法才有效:1~n;只要出現多次和沒出現的數字,不需要次數。

 

 1 #include <iostream>
 2 #include <array>
 3 using namespace std;
 4 
 5 template<int N>
 6 class array_stat {
 7 public:
 8     array_stat(const array<int, N>& arr) : m_arr(arr) {
 9     }
10 
11     void operator()() {
12         for (int i=1; i<=N; i++) {
13             process(i);
14         }
15 
16         for (int i=0; i<N; i++) {
17             if (m_arr[i] == 0)
18                 cout << i+1 << " exists more than once" << endl;
19             else if (m_arr[i] == -2)
20                 cout << i+1 << " doesnt exist" << endl;
21         }
22     }
23 private:
24     array<int, N> m_arr;
25 
26     void process(int i) {
27         if (m_arr[i-1> 0) {
28             int cur = m_arr[i-1];
29             m_arr[i-1= -2;
30             process(cur);
31         }
32         else {
33             m_arr[i-1]++;
34             if (m_arr[i-1> 0)
35                 m_arr[i-1= 0;
36         }
37     }
38 };
39 
40 int main() {
41     array<int10> arr = {2143565656};
42     array_stat<10> stat(arr);
43     stat();
44     return 0;
45 }

源代碼
posted @ 2013-08-29 10:24 everyday 閱讀(731) | 評論 (0)編輯 收藏

2013年8月2日 #

#面試思考題#可憐的小老鼠:有11瓶酒,只有一瓶有毒。喝酒之后,三天會死,只有三天時間。請問至少需要多少只老鼠,可以找出9瓶沒有毒的酒。關注微信公眾賬號“待字閨中”,了解和討論參考分析。

http://www.weibo.com/1915548291/A2QpWmhUH

分析:
直覺上應該是4只鼠可以找出那瓶有毒的。如果要找出9瓶沒有毒的,肯定不大于4嘛。這個大家能想明白嗎?有人想看分析就回復哦。:P

最多需要3只就夠了,9宮格。ABC 和 ABC,每只鼠負責一橫一豎,這樣每一瓶都至少有2只喝過,除了對角線上,如果是對角線上只會死一只,其余都是2只,那2只就能定位到哪一瓶了。額。。不知道還有沒有更少的,只需要2只或者1只就搞定的?

  A B C
A 1 2 3
B 4 5 6
C 7 8 9

A需要喝的是1,2,3,4,7
B需要喝的是2,4,5,6,8
C需要喝的是3,6,7,8,9

現在可以通過死掉老鼠的情況推斷出哪一瓶有問題了,對吧。

更新:
多謝@geagle9。的提醒,確實存在問題,2和4都是A和B死。嗚嗚!!之前的算法錯誤嘍。。

看起來我的9宮格是走不通了,不知道老羅是不是還走的下去。

其實我一直有個不明白的是,一共11個瓶子,為啥只要找出9個沒有毒的就可以了。答案是要2個一組,分6組,這樣的話,用3個老鼠能定位到每一組,這個時候肯定是有一組有問題的,但不管是哪一組,至少能有9瓶是好的。哎呀媽呀。終于弄出來了。
1,2 -> A
3,4 -> B
5,6 -> C
7,8 -> A+B
9,10 -> A+C
11 ->B+C
posted @ 2013-08-02 17:26 everyday 閱讀(310) | 評論 (0)編輯 收藏

2013年8月1日 #

     摘要: 一座金字塔,從上到下,第一層有一個杯子、第二層有兩個杯子,依次類推。每個杯子的容量為C升,從塔頂倒下L升水,當1號杯子滿了之后,會等量溢出到2號和3號杯子。當2號和3號滿了,2號溢出到4號和5號,3號溢出到5號和6號,注意5號接受來自兩個杯子的水。依次類推。給定C和L,請問,第n杯里有多少水。   閱讀全文
posted @ 2013-08-01 13:43 everyday 閱讀(453) | 評論 (0)編輯 收藏

2013年7月19日 #

     摘要: #面試題#Facebook用戶都是雙向的好友,a是b的好友,那么b一定是a的。給定一個用戶列表,有些用戶是好友,有些不是,請判斷,這些用戶是否可以劃分為兩組,每組內的用戶,互相都不是好友。如果能,請給出這個劃分。比如用戶:{1, 2, 3} 好友關系:1-2, 2-3 劃分:{1,3} {2}。

題目乍一看,感覺像是圖連通的問題。細細品了下,貌似不是滴。  閱讀全文
posted @ 2013-07-19 09:52 everyday 閱讀(807) | 評論 (0)編輯 收藏

2013年7月18日 #

     摘要: #面試編程題#一 個不能少:有k個有序的數組,請找到一個最小的數字范圍。使得這k個有序數組中,每個數組都至少有一個數字在該范圍中。例如:1:{ 4, 10, 15, 24, 26 };2: { 0, 9, 12, 20 };3: { 5, 18, 22, 30 }。所得最小范圍為[20,24],其中,20在2中,22在3中,24在1中。  閱讀全文
posted @ 2013-07-18 10:14 everyday 閱讀(337) | 評論 (0)編輯 收藏

2013年7月17日 #

前些天,看到很多大牛就“面試該不該問算法題”進行了大量的討論和廝殺,作為小程序員也就看看的份。昨天在微博上看到有個網友對一個面試題做的評論,“如果一個人看過類似解法,能回答出來,一個人沒看過回答不出來,就能說明回答不出來的能力就不如回答出來的嗎?”對此我表示贊同,確實不能說明回答不出的能力不如看過而回答出來的人。

 

但是如果我是面試官,我肯定會對回答出來的人更有好感。為什么?我沒有理由不對回答出我問題的人欣賞,而對沒有回答出來的人更欣賞嘛,我想這是人之常情吧。我剛才說我贊同,確實不能證明回答出來的人更有能力,假如他是看過的,但是我想至少能說明或許他更勤奮,為了面試做了準備,平時有這方面的興趣等,難道不是嗎?

 

退一步講,作為面試官為什么要去證明回答不出的人更有實力呢?這不是應該應聘者的事嗎?應聘者才需要證明自己更有能力勝任這個工作吧?

 

通常應聘者被問到一些自己回答不了的問題之后,會很緊張(更緊張),以至于影響發揮,完全體現不出自己的實力。其實我倒覺得可以正視自己回答不了的問題,這些只不過是所有面試問題中的一小部分,不如坦白的承認這方面自己相對較弱,然后引導面試官問一些自己比較擅長的問題,能體現自己的能力(分析問題解決問題,學習能力,編碼能力)的方向。當面試官問你一些你不熟悉的問題,坦白說不會,“這個方面我不太熟,但是相關的,方面,我平時比較關注,也花了不少時間,有些”(前提是,說實話)這個時候如果面試官也了解這方面,可以深入的問你這方面的問題;即便面試官不了解這方面,也會對你有好感,改善對你的看法。

posted @ 2013-07-17 09:13 everyday 閱讀(434) | 評論 (0)編輯 收藏

2013年7月13日 #

這個問題很簡單,大學學數據結構的時候,講堆棧一章的時候作為其中一個例子來說的。但是如果面試中被問到這個題,我想用堆棧來做應該不能被接受吧,理由是空間和時間的代價都挺高的。

有沒有稍微好點的算法呢?介紹個時間O(n), 空間O(1)的算法。

既然我們只是要找出括號有沒有匹配就行了,那我們用一種方式記下左括號和右括號的次數不就可以了,例如left_count, right_count。它們的差為0不就好了?只要不為0,肯定就不匹配了,對吧?更進一步,為啥非要用2個變量呢,一個就夠了嘛。遇到左括號++,遇到右括號--,最后為0即匹配。
 1 bool is_brackets_match(char *const input) {
 2     if (input != nullptr) {
 3         char *p = input;
 4         int count = 0;
 5 
 6         while (*p != '\0') {
 7             if (*p == '(')
 8                 ++count;
 9             else if (*p == ')')
10                 --count;
11 
12             p++;
13         }
14 
15         if (count == 0)
16             return true;
17     }
18     return false;
19 }
posted @ 2013-07-13 17:20 everyday 閱讀(895) | 評論 (1)編輯 收藏

2013年7月12日 #

#面試編程題#給定一個數組A,其中有一個位置被稱為Magic Index,含義是:如果i是Magic Index,則A[i] = i。假設A中的元素遞增有序、且不重復,請給出方法,找到這個Magic Index。當A中允許有重復的元素,該怎么辦呢?

第一個,不重復,很簡單,用二分查找就OK了。對吧

 1 int find_magic_index2(int *list, int count) {
 2     int low = 0, high = count - 1;
 3     while (high > low) {
 4         int idx = (high + low) / 2;
 5         if (idx == list[idx])
 6             return idx;
 7         else if (list[idx] > idx) {
 8             high = idx - 1;
 9         }
10         else 
11             low = idx + 1;
12     }
13 
14     return -1;
15 }

第二個,可重復的,該怎么辦?從頭到尾走一邊,總歸是可以的嘛。:)。我的想法是,如果a[i]等于i的話,找到了;如果大于i的話,讓i=a[i],不然i++繼續找。這樣最差的情況才是O(n)
至于為什么可以讓i=a[i],原因由于數列是遞增的,所以數組元素在{i, a[i]}的區間中,肯定不可能存在magic index。這樣看上去是不是跳躍著前進啊。:)
 1 int find_magic_index (int *list, int count) {
 2     int i=0;
 3     while (i<count) {
 4         if (list[i] == i)
 5             return i;
 6         else if (list[i] > i)
 7             i = list[i];
 8         else
 9             i++;
10     }
11     return -1;
12 }
posted @ 2013-07-12 14:25 everyday 閱讀(472) | 評論 (1)編輯 收藏

單鏈表的快速排序
單鏈表的快速排序跟數組的排序原理上一致,有一個分區(區分)的函數在一個區間中針對某個標桿值進行區分,比它大的放它后面,比它小的放它前面,并返回它的地址,好對它前面的以及它后面的遞歸。

單鏈表的快速排序跟數組有個明顯的區別,就是指示起始和終止的元素,在一輪之后它們在鏈表中的位子會發生改變,所以需要返回一個新的起始的位置(終止的位置)
我的算法中總是拿后一個的節點作為終止位置,所以它在鏈表中的位子其實是不改變的,所以我只修改了起始位置指向新的起始位置即可。

我的算法是,用2個鏈表,一個放比它大的一個放比它小的,最后接起來,它的位置就是mid,而其實位置就是當初起始的前一個節點在新鏈表中的next。有點拗口,就是說a->start->...->nullptr,這一輪傳進來的是start,那么經過這輪的分區之后,start的位置肯定改變了,對吧?但是a->next的地址沒有改變,即&(a->next),因為start之前的都會原封不動的放在那里。我覺得用指針的地址來處理是這里的關鍵之處吧。


這是一輪partition之前和之后的圖示,之后就對于(begin, mid)和(mid->next, end)進行快速排序即可。

 1 // Problem: sort a singly link list by Quick Sort
 2 node *partition(list &l, node *&begin, node *end = nullptr) {
 3     // if end is the next node, that means it's only one node to sort
 4     if (begin == nullptr || end == begin->next) {
 5         return nullptr;
 6     }
 7 
 8     list small_list, big_list;
 9     node *current = l.root;
10     node *pivot = begin;
11     node **pbegin;          // points to the address of begin
12     node **s_current = &small_list.root, **b_current = &big_list.root;
13 
14     // move previous nodes before 'begin' to small list
15     while (current != begin) {
16         *s_current = current;
17         s_current = &(*s_current)->next;
18         current = current->next;
19     }
20 
21     // pbegin presents the location(address) of begin item, e.g. if (a->next == begin) then pbegin = &a->next;
22     pbegin = s_current;
23 
24     while (begin != end) {
25         if (begin->data < pivot->data) {
26             *s_current = begin;
27             s_current = &(*s_current)->next;
28         }
29         else {
30             *b_current = begin;
31             b_current = &(*b_current)->next;
32         }
33 
34         begin = begin->next;
35     }
36 
37     // pass begin back to quick_sort for next sort action
38     begin = *pbegin;
39 
40     *b_current= end;
41     *s_current = big_list.root;
42     l = small_list;
43     l.print();
44 
45     // current pivot would be the end node for smaller set sorting
46     return big_list.root;
47 }
48 
49 void quick_sort(list &l, node *begin, node *end = nullptr) {
50     if (begin == end) {
51         return;
52     }
53     // mid represents the pivot node which is the next node of the end of the small list
54     node *mid = partition(l, begin, end);
55 
56     if (mid != nullptr){
57         quick_sort(l, begin, mid);
58     }
59 
60     if (mid != nullptr &&
61         mid->next != nullptr) {        
62         quick_sort(l, mid->next, end);
63     }
64 }

代碼
posted @ 2013-07-12 13:41 everyday 閱讀(2917) | 評論 (0)編輯 收藏

2013年7月3日 #

yeah. 首先要恭喜下自己,昨天的算法蒙對了,請看@陳利人帖子。 【鼓掌】【鼓掌】:)

經典面試題:蓄水池抽樣

要求從N個元素中隨機的抽取k個元素,其中N無法確定。

這種應用的場景一般是數據流的情況下,由于數據只能被讀取一次,而且數據量很大,并不能全部保存,因此數據量N是無法在抽樣開始時確定的;但又要保持隨機性,于是有了這個問題。所以搜索網站有時候會問這樣的問題。

這里的核心問題就是“隨機”,怎么才能是隨機的抽取元素呢?我們設想,買彩票的時候,由于所有彩票的中獎概率都是一樣的,所以我們才是“隨機的”買彩票。那么要使抽取數據也隨機,必須使每一個數據被抽樣出來的概率都一樣。


哎呀媽呀,這題目一天比一天難啊。目測搞不定啊。

在班車上簡單分析了下,N的值要到最后才知道,從N個里面抽k個元素,要是概率知識沒有都還給老師的話,每個元素被抽中的概率是CNk,對不?唔,既然在N知道之前,就要一樣概率的抽取k個元素,那我能不能猜想最后的算法其實是跟N無關的呢?不管怎么樣先挖個坑再說,目測這個坑不一定能填上。:D

posted @ 2013-07-03 09:29 everyday 閱讀(811) | 評論 (1)編輯 收藏

僅列出標題  下一頁
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美另类国产| 欧美一区二区三区免费看| 香港久久久电影| 国产欧美激情| 久久精品国产久精国产一老狼| 亚洲一区二区高清| 国产视频在线观看一区二区三区| 欧美中文字幕在线播放| 一区二区免费看| 国产精品一区二区a| 久久久久久久高潮| 裸体一区二区| 亚洲特色特黄| 午夜一区在线| 亚洲欧洲日本mm| 美女精品视频一区| 久久尤物视频| 在线一区视频| 篠田优中文在线播放第一区| 在线观看91精品国产麻豆| 亚洲黄色天堂| 国产精品白丝jk黑袜喷水| 久久精品观看| 欧美精品在线观看91| 亚洲尤物精选| 另类综合日韩欧美亚洲| 一区二区日韩精品| 久久国产视频网站| 亚洲视频在线观看三级| 久久精品天堂| 亚洲自拍另类| 免费日韩成人| 久久久久国产精品www| 欧美精品福利| 久久夜色精品国产欧美乱极品| 欧美精品电影| 久久久一区二区三区| 欧美日韩日本网| 欧美jizzhd精品欧美喷水| 欧美日韩福利在线观看| 久久久久久高潮国产精品视| 欧美日韩免费观看中文| 欧美激情aⅴ一区二区三区| 国产精品白丝jk黑袜喷水| 裸体女人亚洲精品一区| 国产乱码精品一区二区三| 亚洲电影自拍| 伊人色综合久久天天| 欧美在线播放| 在线视频你懂得一区| 老司机免费视频一区二区三区| 午夜精品一区二区在线观看| 欧美激情国产日韩精品一区18| 久久久国产精彩视频美女艺术照福利| 欧美日一区二区三区在线观看国产免| 欧美成人精品不卡视频在线观看| 国产在线乱码一区二区三区| 亚洲视频网站在线观看| 一本色道久久综合亚洲精品不| 久久精品水蜜桃av综合天堂| 欧美一区二视频| 国产精品视频专区| 亚洲一区二区三区视频| 亚洲免费在线播放| 欧美天堂在线观看| 一本久道久久久| 亚洲在线观看免费| 国产精品h在线观看| 亚洲人成人99网站| 亚洲全部视频| 老鸭窝毛片一区二区三区| 麻豆精品在线观看| 亚洲国产欧美不卡在线观看| 久热re这里精品视频在线6| 免费观看一级特黄欧美大片| 国内自拍一区| 久久久久免费视频| 欧美福利视频网站| 日韩午夜剧场| 欧美亚洲成人网| 中日韩在线视频| 欧美一区综合| 免费看亚洲片| 欧美激情精品久久久久久免费印度| 欧美国产视频在线| 在线视频精品一| 国产伦精品一区二区三区照片91| 亚洲一区免费网站| 久久天天狠狠| 亚洲乱码视频| 欧美午夜一区二区福利视频| 亚洲一区二区伦理| 久久久综合香蕉尹人综合网| 亚洲高清在线观看一区| 欧美日韩一区精品| 久久av红桃一区二区小说| 欧美成人免费在线| 亚洲性感激情| 在线观看日韩av| 欧美日韩免费一区| 久久精品免费| av成人天堂| 欧美不卡在线| 午夜视频久久久| 亚洲韩国日本中文字幕| 欧美视频中文一区二区三区在线观看 | 亚洲视频一区在线| 久久久久久日产精品| 亚洲精品综合| 国产中文一区二区| 欧美日本亚洲韩国国产| 欧美在线精品一区| 亚洲美女尤物影院| 久久久夜夜夜| 亚洲女性裸体视频| 欧美在线观看天堂一区二区三区| 欧美激情免费观看| 久久成人一区| 一区二区高清| 亚洲人在线视频| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲欧美视频在线| 99re8这里有精品热视频免费 | 你懂的视频欧美| 亚洲欧美日韩国产成人精品影院| 欧美激情中文不卡| 老司机免费视频一区二区| 午夜精品国产精品大乳美女| 99re8这里有精品热视频免费| 伊人色综合久久天天| 国产精品普通话对白| 欧美精品二区| 欧美国产亚洲另类动漫| 欧美中文字幕在线播放| 在线一区二区三区四区五区| 亚洲第一成人在线| 欧美成人精品高清在线播放| 久久不射中文字幕| 欧美一级夜夜爽| 亚洲欧美日韩在线一区| 亚洲一区3d动漫同人无遮挡| 亚洲伦理中文字幕| 亚洲七七久久综合桃花剧情介绍| 1000部国产精品成人观看 | 亚洲午夜激情网站| 国产精品99久久久久久宅男 | 亚洲精品国产欧美| 亚洲精品韩国| 国产精品日韩在线观看| 欧美国产另类| 欧美激情2020午夜免费观看| 亚洲国产精品ⅴa在线观看| 欧美国产日产韩国视频| 欧美激情一区二区三区成人 | 亚洲无亚洲人成网站77777| 一区二区三区www| 在线视频你懂得一区二区三区| av成人免费在线| 亚洲免费小视频| 亚洲欧美色一区| 久久国产精品久久精品国产| 久久久精品999| 蜜桃av一区二区在线观看| 欧美国产三级| 中文av字幕一区| 久久精品午夜| 欧美国产91| 国产精品三级视频| 国产一区免费视频| 亚洲大片在线| 国产精品99久久久久久白浆小说| 一区二区三区免费网站| 亚洲一区二区黄| 久久艳片www.17c.com| 欧美成人免费全部| 亚洲精品免费电影| 中文久久精品| 久久综合亚洲社区| 国产精品久久激情| 尤物九九久久国产精品的分类| 亚洲久久视频| 久久国产欧美| 亚洲另类黄色| 久久成人免费网| 国产精品久久7| 亚洲国产精品成人一区二区| 亚洲系列中文字幕| 日韩午夜在线电影| 午夜精品一区二区三区在线播放 | 亚洲欧美激情诱惑| 久久激情五月丁香伊人| 欧美成人亚洲成人| 国产午夜精品一区二区三区视频| 最近中文字幕日韩精品| 亚洲少妇自拍| 亚洲高清在线观看一区| 午夜精品久久久久久久99黑人| 欧美成人官网二区| 国产一区在线播放| 亚洲在线一区二区三区|