leetcode演算法練習

2021-10-23 02:20:28 字數 4329 閱讀 9651

// 1111.有效括號的巢狀深度

/*有效括號字串 定義:對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末「有效括號字串」部分。

巢狀深度 depth 定義:即有效括號字串巢狀的層數,depth(a) 表示有效括號字串 a 的巢狀深度。詳情參見題末「巢狀深度」部分。

給你乙個「有效括號字串」 seq,請你將其分成兩個不相交的有效括號字串,a 和 b,並使這兩個字串的深度最小。

不相交:每個 seq[i] 只能分給 a 和 b 二者中的乙個,不能既屬於 a 也屬於 b 。

a 或 b 中的元素在原字串中可以不連續。

a.length + b.length = seq.length

深度最小:max(depth(a), depth(b)) 的可能取值最小。

劃分方案用乙個長度為 seq.length 的答案陣列 answer 表示,編碼規則如下:

answer[i] = 0,seq[i] 分給 a 。

answer[i] = 1,seq[i] 分給 b 。

*/public class demo10

return ans;

}}

package leetcode;

/*給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。

示例:輸入:

[ ["1","0","1","0","0"],

["1","0","1","1","1"],

["1","1","1","1","1"],

["1","0","0","1","0"]

]輸出: 6

*/public class demo11 ,,,

};system.out.println(maximalrectangle(b));

}public static int maximalrectangle(char matrix) }}

return max;

}}

package leetcode;

//請你來實現乙個 atoi 函式,使其能將字串轉換成整數。

//// 首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下:

////

// 如果第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字字元組合起來,形成乙個有符號整數。

// 假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成乙個整數。

// 該字串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函式不應該造成影響。

////

// 注意:假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。

//// 在任何情況下,若函式不能進行有效的轉換時,請返回 0 。

////

//// 本題中的空白字元只包括空格字元 ' ' 。

// 假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 [−231, 231 − 1]。如果數值超過這個範圍,請返回 int_max (231

// − 1) 或 int_min (−231) 。

////

////

// 示例 1:

//// 輸入: "42"

//輸出: 42

////

// 示例 2:

//// 輸入: " -42"

//輸出: -42

//解釋: 第乙個非空白字元為 '-', 它是乙個負號。

// 我們盡可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。

////

// 示例 3:

//// 輸入: "4193 with words"

//輸出: 4193

//解釋: 轉換截止於數字 '3' ,因為它的下乙個字元不為數字。

////

// 示例 4:

//// 輸入: "words and 987"

//輸出: 0

//解釋: 第乙個非空字元是 'w', 但它不是數字或正、負號。

// 因此無法執行有效的轉換。

//// 示例 5:

//// 輸入: "-91283472332"

//輸出: -2147483648

//解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。

// 因此返回 int_min (−231) 。

//// related topics 數學 字串

public class demo12

while (a(integer.max_value-chars[a]+'0')/10)

if (negative&&-ans<(integer.min_value+chars[a]-'0')/10)

ans=ans*10+chars[a]-'0';

a++;

}else//數字後出現了其他的字元,則終止迴圈

}return negative?-ans:ans;

}}

package leetcode;

//// 給定乙個包含 m × n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態:1 即為活細胞(live),或 0 即為死細胞(dea

//d)。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:

////

// 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;

// 如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;

// 如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;

// 如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;

////

// 根據當前狀態,寫乙個函式來計算面板上所有細胞的下乙個(一次更新後的)狀態。下乙個狀態是通過將上述規則同時應用於當前狀態下的每個細胞所形成的,其中細胞的出生

//和死亡是同時發生的。

////

//// 示例:

//// 輸入:

//[// [0,1,0],

// [0,0,1],

// [1,1,1],

// [0,0,0]

//]//輸出:

//[// [0,0,0],

// [1,0,1],

// [0,1,1],

// [0,1,0]

//]//

////

// 高階:

////

// 你可以使用原地演算法解決本題嗎?請注意,面板上所有格仔需要同時被更新:你不能先更新某些格仔,然後使用它們的更新後的值再更新其他格仔。

// 本題中,我們使用二維陣列來表示面板。原則上,面板是無限的,但當活細胞侵占了面板邊界時會造成問題。你將如何解決這些問題?

//// related topics 陣列

//leetcode submit region begin(prohibit modification and deletion)

class demo13 ;

int y=;//用兩個陣列記錄八個方向

//如果沒有元素則停止方法

if (board.length==0)

int a=board.length;//寬度

int b=board[0].length;//長度

for (int i=0;i=b||newy<0||newy>=a)continue;

cnt+=board[newy][newx]&1;//因為陣列可能已經被運算了,所有要進行位運算

}// 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;

// 如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;

// 如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;

if ((board[i][j]&1)>0)

// else if (cnt==2||cnt==3)board[i][j]=0b01;

// else if (cnt<2)board[i][j]=0b01;

}else if (cnt==3)}}

//將陣列的狀態轉換為下乙個狀態

for (int i=0;i>=1;}}

}}//leetcode submit region end(prohibit modification and deletion)

leetcode演算法練習

1014.最佳觀光組合 給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。示例 輸入 8,1,5,2,6 輸...

leetcode演算法練習 打家劫舍

題目 打家劫舍 你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示...

leetcode演算法練習 移除元素

給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例1 給定 nums 3 2,2 3 v...