在乙個長度為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(constint *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),但是這種演算法不能保證找出所有重複的數字。
在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
classsolution
}return
false
; }
};
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
這道題其實用python寫非常簡單。如果筆試的時候可以這麼寫
classsolution:
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 問題描述 在乙個長度...