劍指offer陣列練習

2021-08-16 06:34:09 字數 1184 閱讀 2537

1.面試題第56題

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

1)最初的思路:將陣列中的第乙個數字與其他的數字進行對比,如果有與它相同的就將第二個數字與其他數字對比,依次下去。問題:會發現時間複雜度過高。真正寫**時會根據題目的特徵加一些判斷,來減小比較的次數,例如將新增乙個計數器,在有兩個出現一次數字時就停止遍歷陣列,但依然不是乙個好的方法。

**實現如下(在牛客網上執行通過):

//num1,num2分別為長度為1的陣列。傳出引數

//將num1[0],num2[0]設定為返回結果

public class solution

array[array.length-1] = temp;

count++;

}else

}}

更好的方法:維護兩個指標:第乙個指標初始化指向陣列的第乙個數字,它只向後移動。第二個指標初始化指向陣列的最後乙個數字,它只向前移動。如果第乙個指標指向偶數就停止移動,同樣的第二個指標指向奇數就停止移動,然後兩隻指標指向的數字交換。兩指標重複上面的操作,直到第二個指標在第乙個指標前面為止。

**實現:

public static void reorderarray2(int  array)

}

題目描述

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並

保證奇數和奇數,偶數和偶數之間的相對位置不變

。思路:用兩個指標考,指標i指向第乙個偶數,指標j指向第乙個奇數,將[i,j-1]的數都向右移動一位,將指標j指向的資料賦值給指標i指向的位置。

**實現:

public class solution 

j = i+1;

while(j<=array.length-1&&array[j]%2==0)

if(j<=array.length-1)

array[i] = temp;

}if(j>array.length-1) //如果發現後面的都是偶數了就退出迴圈

break;

i++;}}

}

劍指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 問題描述 在乙個長度...