leetcode演算法題 劍指Offer篇(1)

2021-10-08 16:11:56 字數 2134 閱讀 4554

1.1 題目描述:

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1

的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

1.2 題解

1.2.1 利用map結構

public

intfindrepeatnumber

(int

nums)

return-1

;}

1.2.2 利用set
public

intfindrepeatnumber2

(int

nums)

return-1

;}

1.2.3 直接修改陣列。

對陣列進行重新排序,使得數字i在下標為i的位置。比如下標為i的數字如果不是i的,而是j的話,我們就將其與下標為j的數字交換。否則,返回i。

public

intfindrepeatnumber

(int

nums)

}return-1

;}

2.1題目描述
在乙個 n * m

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

示例: 現有矩陣 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19],

[3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]

給定 target = 5,返回 true。 給定 target = 20,返回 false。

2.2 題解

2.2.1 暴力解法,遍歷

public

boolean

findnumberin2darray

(int

matrix,

int target)

int rows = matrix.length, columns = matrix[0]

.length;

for(

int i =

0; i < rows; i++)}

}}

2.2.2 左下角標誌數法

標誌數引入: 此類矩陣中左下角和右上角元素有特殊性,稱為標誌數。

左下角元素: 為所在列最大元素,所在行最小元素。

右上角元素: 為所在行最大元素,所在列最小元素。

標誌數性質: 將 matrix 中的左下角元素(標誌數)記作 flag ,則有:

若 flag > target ,則 target 一定在 flag 所在行的上方,即 flag 所在行可被消去。

若 flag < target ,則 target 一定在 flag 所在列的右方,即 flag 所在列可被消去。

本題解以左下角元素為例,同理,右上角元素 也具有行(列)消去的性質。

public

boolean

findnumberin2darray2

(int

matrix,

int target)

int rows =matrix.length;

int cols=matrix[0]

.length;

int flag=0;

//左下角數作為標誌數

int row=rows-

1,col=0;

while

(row>=

0&&colreturn

false

;}

1.1 題目描述

2.2 題解

2.2.1 遍歷替換

public string replacespace

(string s)

else

} string newstr =

newstring

(array,

0, size)

;return newstr;

}

leetcode演算法題 劍指Offer篇(13)

1.1 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。1.2 題解 1.2.1 摩爾投票法 驗證 x 是否為眾數 for int num nums if num i count return count nums.length 2?i 0 當無眾數時返回 0 2.1 題目描...

leetcode演算法題 劍指Offer篇(17)

1.1 題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。1.2 題解 1.2.1 暴力求解 public intreversepairs int nums return count 1.2.2 歸併排序public...

leetcode演算法題 劍指Offer篇(20)

1.1 題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。1.2 題解 1.2.1 雙指標public int twosum int nums,int target else if temp target i els...