關於陣列的一些面試題目

2021-08-25 12:49:38 字數 1459 閱讀 6217

1、google面試題: (1)乙個陣列存放了2n+1個整數,其中有n個數出現了2次,1個數出現了1次,找出出現1次的數是多少?(可能不少人遇到過,但是當時 我是第一次遇到,我把我的經過給大家講一遍) a. 由於想在最短時間內解決,我首先想到最簡單的辦法,使用對映統計的辦法,借助輔助陣列(長度為n+1,元素為一結構體(包含數值和 個數兩個成員))進行計數,但是時間複雜度為o(n*n),空間複雜度為o(n+1),面試官讓我改進。 b. 接著我在紙上划划,發現如果排序後重複2次的都排在一起, 如: (3,3),(5,5),(18,18),(26,57),57 那麼只需要每兩兩考察是否一樣,如果不一樣(藍色標誌)則只出現1次的數(26)必定出現在左邊。解法:使用快速排序對陣列進行 排序,再兩兩元素進行比較,相等則繼續前面操作,否則輸出左邊的元素值。 時間複雜度為o(nlogn)。 面試官繼續詢問有沒更好的辦法,我想時間複雜度一定是線性的o(2n+1) c. 當時我沒能想出來,後來回去後找到了解法:對陣列a的所有元素做異或,即a[0]異或a[1]…… 異或a[2n]結果就是答案,理由:相同的數異或等於0,而0和任何數以後等於任何數,且異或運算可交換。 2、深信服面試:1、google面試題的變形:乙個陣列存放若干整數,1個數出現了奇數次,其餘數出現偶數次,找出出現奇數次的數是多少? 解法跟上一題一樣使用異或運算 3、google面試:給定乙個存放整數的陣列,需要找出其中兩個之和等於一指定的值,沒有則返回提示。 解法(如果有更好的辦法,請圓友分享一下): (1)先排序,再使用兩個int變數low和high標記當前考察的兩個元素的下標,一前一後,初始化 low=0,high=n-1(陣列a長度) (2)如果lowsum) else } cout=0) } else j--; } for(int m=i-1;m>j;m--) a[j+1]=key; } } 解法2:使用快速排序中partition尋找樞軸位置中的高低端交換思想,只是把判斷條件改為low下標元素為奇數則low++,否則low、high下標元素交換;high下標元素為偶數則high--,否則low、high下標元素交換。 **: void arrangepartition1(int a,int low,int high) a[j+1]=key; } } 解法2:對上面的解法2修改。 使用快速排序的思想,其中partition(尋找樞軸位置函式)把 (1)若樞軸元素為偶數,對high下標元素判斷條件改為如果為偶數並且大於樞軸元素,high--,否則與low下標元素交換;對low下標元素判斷條件改為如果low元素為奇數或者為偶數且小於樞軸元素,low++,否則與high下標元素交換。 (2)若樞軸元素為奇數,對high下標元素判斷條件改為如果為偶數或者大於樞軸元素,high--,否則與low下標元素交換;對low下標元素判斷條件改為如果low元素為奇數並且小於樞軸元素,low++,否則與high下標元素交換。 **: int arrangepartition2(int a,int low,int high) } else } low++; } if(low

中秋看房有感

排序之線性排序(counting sort, radix-sort, bucket-sort)

記錄一些webservice面試題目

2.wsdl web service描述語言,對應.wsdl文件,乙個webservice對應乙個文藝的wsdl文件,定義了客戶端與服務端傳送請求和響應的資料的過程。3.soap是一種簡單的基於 xml的協議,它使應用程式通過 http 來交換資訊,簡單物件訪問協議!4.如何發布乙個webservi...

單鏈表的一些題目,面試題

獲取單鏈表的節點個數 如果是帶頭節點的鍊錶,需求不統計頭節點 methodname 獲取單鏈表的節點個數 如果是帶頭節點的鍊錶,需求不統計頭節點 description todo author 63417 param head 鍊錶的頭節點 return 返回有效節點的個數 date 2021年1月...

關於JDBC的一些面試題

1.statement prestatement有什麼區別 解答 後者的效率比前者高,在使用preparedstatement物件執行sql命令時,命令被資料庫進行編譯和解析,然後被放到命令緩衝區。然後,每當執行同乙個preparedstatement物件時,它就會被再解析一次,但不會被再次編譯。在...