1.1 題目描述:
在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-11.2 題解的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。
1.2.1 利用map結構
public
intfindrepeatnumber
(int
nums)
return-1
;}
1.2.2 利用setpublic
intfindrepeatnumber2
(int
nums)
return-1
;}
1.2.3 直接修改陣列。
對陣列進行重新排序,使得數字i在下標為i的位置。比如下標為i的數字如果不是i的,而是j的話,我們就將其與下標為j的數字交換。否則,返回i。
public
intfindrepeatnumber
(int
nums)
}return-1
;}
2.1題目描述在乙個 n * m2.2 題解的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
示例: 現有矩陣 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.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...