▊【q31】(md)下乙個排列實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。
如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。
必須原地修改,只允許使用額外常數空間。
以下是一些例子:
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
class
solution
if(i >=0)
swap
(nums, i, j);}
reverse
(nums, i +1)
;}// 交換
private
void
swap
(int
nums,
int i,
int j)
// 倒序
private
void
reverse
(int nums,
int start)
}// 總結:
// 通過這道題,不僅要記住求下乙個字典值的方法(死記硬背),還要知道,在一些情況下,while語句比for語句清晰好用
}
▊【q200】(md)島嶼數量給你乙個由 『1』(陸地)和 『0』(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
示例 1:
輸入: 1 1 1 1 0
1 1 0 1 0
1 1 0 0 0
0 0 0 0 0
輸出: 1
示例 2:
輸入: 1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
輸出: 3
解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連線而成。
class
solution}}
return islandnum;
}private
void
combine
(char
grid,
int i,
int j)
else
if(grid[i]
[j]==
'1')
combine
(grid, i -
1, j)
;combine
(grid, i +
1, j)
;combine
(grid, i, j -1)
;combine
(grid, i, j +1)
;}}
class
solutionif(
isarea
(r, c +1)
&& grid[r]
[c +1]
=='1')if
(isarea
(r +
1, c)
&& grid[r +1]
[c]==
'1')if(
isarea
(r, c -1)
&& grid[r]
[c -1]
=='1')}
}}}return islandnum;
}private
boolean
isarea
(int i,
int j)
}
▊【q1248】(md)優美子陣列給你乙個整數陣列 nums 和乙個整數 k。如果某個連續子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是「優美子陣列」。
請返回這個陣列中「優美子陣列」的數目。
示例 1:
輸入:nums = [1,1,2,1,1], k = 3
輸出:2
解釋:包含 3 個奇數的子陣列是 [1,1,2,1] 和[1,2,1,1] 。
示例 2:
輸入:nums = [2,4,6], k = 1
輸出:0
解釋:數列中不包含任何奇數,所以不存在優美子陣列。
示例 3:
輸入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
輸出:16
class
solution
, k = 2
* 奇數為1和3;
* 左側有 4, 6,所以左側有3種可能(包括空)
* 右側有 8,所以右側有2中可能(包括空)
* 故而答案是: 3 * 2 = 6
* * 弄清楚規律,就可以考慮,該用何種演算法去實現?☆★☆【滑動視窗】
* 設雙指標l,r都從下標0開始移動;
* r先走,直到累計奇數為 k,r停下;
* 此時的左指標l和右指標r已經形成了乙個滿足條件的「視窗」,
* 下面企圖從左側(l)縮小這個視窗(跟進);從右側(r)擴大這個視窗;並且在同時記錄下左右指標分別可以移動的距離,用於相乘
* 包含用這k奇數的視窗已經完全遍歷完畢。下面使奇數計數oddnum減 1,r向右尋找下乙個奇數;l + 1,因為此時l指的就是上次用過的奇數
*/if(nums == null || nums.length ==0)
return0;
int res =0;
int l =0;
int r =0;
int oddnum =0;
while
(r < nums.length)
if(oddnum == k)
while
(r < nums.length &&
(nums[r]&1
)==0)
res +=
(lnum +1)
*(rnum +1)
;
l++;// 原先的第乙個奇數不再用了,l移開它
oddnum--
;// 左側拋棄乙個奇數,r向右側尋找下乙個奇數}}
return res;
}}
qs from
♣ loli suki
♠ end
LeetCode Sama的個人記錄 2
q7 ez 整數反轉給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根...
LeetCode Sama的個人記錄 12
q1371 md 每個母音包含偶數次的最長字串 給你乙個字串 s 請你返回滿足以下條件的最長子字串的長度 每個母音字母,即 a e i o u 在子字串中都恰好出現了偶數次。示例 1 輸入 s eleetminicoworoep 輸出 13 解釋 最長子字串是 leetminicowor 它包含 e...
LeetCode Sama的個人記錄 39
q141 ez 環形列表如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。如果鍊錶中存在環,則返回 true 否則,返回 false 高階 使用常量空間 class solution listnode turtle head listnode rabbit head.n...