劍指offer陣列1

2022-04-11 15:25:46 字數 1914 閱讀 5382

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

//

引數://

numbers: 乙個整數組

//length: 陣列的長度

//duplication:輸出陣列中的乙個重複的數字

//返回值:

//true - 輸入有效,並且陣列中存在重複的數字

//false - 輸入無效,或者陣列中沒有重複的數字

bool duplicate(int numbers, int length, int *duplication)

for (int i = 0; i < length; ++i)

//交換numbers[i]和numbers[numbers[i]]

int temp =numbers[i];

numbers[i] =numbers[numbers[i]];

numbers[numbers[i]] =temp;}}

return

false

;}

時間複雜度為o(n),空間複雜度為o(1)

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

int countrange(const

int *numbers, int length, int start, int

end);

int getduplication(const

int* numbers, int

length)

//如果[start, middle]內的數量超過middle - start + 1,證明裡面一定有重複的數字

if (count > (middle - start + 1

)) end =middle;

else

start = middle + 1

; }

return -1;}

int countrange(const

int *numbers, int length, int start, int

end)

return

count;

}

上述**按照二分查詢的思路,如果輸入長度為n的陣列,那麼函式countrange將被呼叫o(logn)次,每次需要o(n)的時間,因此總的時間複雜度是o(nlogn),空間複雜度為o(1),但是這種演算法不能保證找出所有重複的數字。

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

class

solution

}return

false

; }

};

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

這道題其實用python寫非常簡單。如果筆試的時候可以這麼寫

class

solution:

defreorderarray(self, array):

odd,even =,

for i in

array:

if i % 2 == 1:

else

:

return odd+even

劍指offer 陣列

資料是最簡單的資料結構,它佔據一塊連續的記憶體並按照順序儲存資料。建立陣列時,首先指點陣列的容量大小,然後根據大小分配記憶體。缺點 空間效率不高。經常有空閒的區域滅有得到充分利用。優點 時間效率很高。可以根據時間效率高的特點,來實現簡單的雜湊表 把陣列的下標設為雜湊表的鍵值,陣列中的每乙個數字設為雜...

劍指offer 陣列

public class 03 陣列中的重複數字 swap number,number i i return 1 交換 public void swap int number,int i,int j public class 03 陣列中的重複數字 return 1 public intfindre...

劍指offer 陣列

問題描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。function find target,array return false 問題描述 在乙個長度...