面試筆記1(找出陣列中重複的數字)

2021-08-27 20:58:43 字數 914 閱讀 4769

1、在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內,陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數字中任意乙個重複的數字。例如,如果輸入長度為7的數字,那麼對應的輸出是重複的數字2或者3.

程式:bool duplicate(int numbers,int length,int *duplication)

for(i=0;ilength-1)

return false;

}for(i=0;i時間複雜度o(n),空間複雜度o(1)。

2、不修改陣列找出重複的數字(與題目一一樣,只是找出任意乙個重複的數字即可,,沒有要求找出所有的重複數字)

在乙個長度為n+1的陣列裡的所有數字都在1~n的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但是不能修改輸入的陣列。例如,如果輸入長度為8的陣列,那麼對應的輸出是重複的數字2或者3

時間複雜度o(nlogn),空間複雜度是o(1)

思路解析:為什麼會有重複的數字,假如沒有重複的數字,那麼在1~n的範圍裡有n個數字,如果有n+1個數字則說明至少有乙個數字是重複的。可以把1~n的數字從中間的數字m分為兩部分,前面一半為1~m,後面一半為m+1~n,如果1~m的數字的個數超過m個則說明裡面有重複的數字,否則另一半的陣列裡一定有重複的數字,。然後繼續把包含重複數字的陣列區間一分為二,直到找到乙個重複的數字

程式:int getduplication(const int*numbers,int length)

if(count>(middle-start+1))

end=middle;

else 

start=middle+1;

}return -1;

}int countrange(const int*numbers,int length,int start,int end)

1 找出陣列中重複的數字

方法1 通過構建hashmap,記錄每個值的重複情況。複雜度 o n o 1 class solution mapmap new hashmap for int i 0 i nums.length i else return 1 方法2 由於題目特徵,構建1 n 1的桶 將每個數字放到對應下標的正確...

面試筆記1(陣列)

開始 c 內建型別分為兩組 基本型別和復合型別。復合型別有 陣列 字串 指標 引用 結構體和共用體。總結 char 位元組數不一樣。還有long的位元組數不一樣,其他都一樣。32位編譯器 跟編譯器有關。char 1個位元組 char 即指標變數 4個位元組 32位的定址空間是2 32,即32個bit...

找出陣列中重複的數字

面試題3 一 找出陣列中重複的數字 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。static bool get duplicate num1 std vecto...