減指offer演算法題刷題總結

2022-09-21 03:42:09 字數 1753 閱讀 6798

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

解題思路:利用hashset去重原理,遍歷新增陣列元素,新增失敗則返回重複元素

**

class

solution

return -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。

解題思路:通過找出規律從左下角或者右上角可以矩陣類似於二叉搜尋樹(左邊小於根節點右邊大於根節點)

**

class

solution

else

if(matrix[i][j]else

}return

false

; }

}

請實現乙個函式,把字串 s 中的每個空格替換成"%20"。

示例 1:

解題思路:可以用stringbuilder重新拼接字串

class

solution

else

}return

sb.tostring();

}}

輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。

示例 1:

輸入:head = [1,3,2]

輸出:[2,3,1]

解題思路1:反向輸出可以考慮遞迴(借助linkedlist存資料,最後加入陣列)

/**

* definition for singly-linked list.

* public class listnode

* } */

class

solution

return

res;

}void

rec(listnode head)

}

解題思路2.利用棧的先入後出特性

/**

* definition for singly-linked list.

* public class listnode

* } */

class

solution

while(!stack.isempty())

int res= new

int[dic.size()];

for(int i=0;i)

return

res;

}}

class

solution

return rec(0,0,inorder.length-1);

}treenode rec(

int pre_root,int in_left,int in_right)

}

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...

劍指offer刷題 2

思路 如果從前往後進行遍歷,那麼每次找到乙個空格,則需要新增兩個位元組來進行替換,我們採用先對字串進行遍歷,查詢字串中的空格的個數,然後對新的字串進行長度的計算,然後從後往前進行替換,每遇到乙個空字元,然後進行替換。class solution int oldnumber 0 int numbers...