From d1e96301933881b0b7e7e14a6aeab804a32a9a64 Mon Sep 17 00:00:00 2001 From: Wen Date: Thu, 26 Aug 2021 13:20:47 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=200027.=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E5=85=83=E7=B4=A0.md=20Python3=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0027.移除元素.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/problems/0027.移除元素.md b/problems/0027.移除元素.md index fadd4d7e..6fce4c6e 100644 --- a/problems/0027.移除元素.md +++ b/problems/0027.移除元素.md @@ -144,15 +144,28 @@ class Solution { Python: -```python +```python3 class Solution: - def removeElement(self, nums: List[int], val: int) -> int: - i,n = 0,len(nums) - for j in range(n): - if nums[j] != val: - nums[i] = nums[j] - i += 1 - return i + """双指针法 + 时间复杂度:O(n) + 空间复杂度:O(1) + """ + + @classmethod + def removeElement(cls, nums: List[int], val: int) -> int: + fast = slow = 0 + + while fast < len(nums): + + if nums[fast] != val: + nums[slow] = nums[fast] + slow += 1 + + # 当 fast 指针遇到要删除的元素时停止赋值 + # slow 指针停止移动, fast 指针继续前进 + fast += 1 + + return slow ``` From b17cdcd283416d63093519f7f804fe364b0f5206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=81=E5=AE=A2=E5=AD=A6=E4=BC=9F?= Date: Thu, 26 Aug 2021 14:59:02 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20242.=E6=9C=89=E6=95=88?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AF=8D=E5=BC=82=E4=BD=8D=E8=AF=8D=20Swift?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0242.有效的字母异位词.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/problems/0242.有效的字母异位词.md b/problems/0242.有效的字母异位词.md index 15bf14ca..1b6b3109 100644 --- a/problems/0242.有效的字母异位词.md +++ b/problems/0242.有效的字母异位词.md @@ -198,6 +198,29 @@ var isAnagram = function(s, t) { }; ``` +Swift: +```Swift +func isAnagram(_ s: String, _ t: String) -> Bool { + if s.count != t.count { + return false + } + var record = Array(repeating: 0, count: 26) + let aUnicodeScalar = "a".unicodeScalars.first!.value + for c in s.unicodeScalars { + record[Int(c.value - aUnicodeScalar)] += 1 + } + for c in t.unicodeScalars { + record[Int(c.value - aUnicodeScalar)] -= 1 + } + for value in record { + if value != 0 { + return false + } + } + return true +} +``` + ## 相关题目 * 383.赎金信 From b32c3bb8a8233ff11e7436319fa952da0195439f Mon Sep 17 00:00:00 2001 From: Bryce S <44215173+GHumorBS@users.noreply.github.com> Date: Thu, 26 Aug 2021 16:20:26 +0800 Subject: [PATCH 3/6] =?UTF-8?q?Update=200454.=E5=9B=9B=E6=95=B0=E7=9B=B8?= =?UTF-8?q?=E5=8A=A0II.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新python算法:明明用了defaultdict[key: int]默认value等于0,却仍要画蛇添足: value = hashmap.get(key) count += value or 0 这也太奇怪了8!!! --- problems/0454.四数相加II.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/problems/0454.四数相加II.md b/problems/0454.四数相加II.md index 7bb24e59..4e61dc2f 100644 --- a/problems/0454.四数相加II.md +++ b/problems/0454.四数相加II.md @@ -161,15 +161,9 @@ class Solution(object): # count=0 # for x3 in nums3: # for x4 in nums4: -# key = -x3-x4 -# value = hashmap.get(key) - - # dict的get方法会返回None(key不存在)或者key对应的value - # 所以如果value==0,就会继续执行or,count+0,否则就会直接加value - # 这样就不用去写if判断了 - -# count += value or 0 - +# key = 0 - x3 - x4 +# value = hashmap[key] # 若差值(key)不存在,则value被赋值0 +# count += value # return count ``` From 56b3c9ba70ba0cd151405c3421c655c34900b842 Mon Sep 17 00:00:00 2001 From: Zhengtian CHU <40222298+lakerschampions@users.noreply.github.com> Date: Thu, 26 Aug 2021 16:29:20 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86559.n=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E6=9C=80=E5=A4=A7=E6=B7=B1=E5=BA=A6=20JAVA?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E6=B3=95=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0104.二叉树的最大深度.md | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/problems/0104.二叉树的最大深度.md b/problems/0104.二叉树的最大深度.md index 7adb8bb7..cde3d460 100644 --- a/problems/0104.二叉树的最大深度.md +++ b/problems/0104.二叉树的最大深度.md @@ -311,6 +311,35 @@ class solution { } ``` +### 559.n叉树的最大深度 +```java +class solution { + /** + * 迭代法,使用层序遍历 + */ + public int maxDepth(Node root) { + if (root == null) return 0; + int depth = 0; + Queue que = new LinkedList<>(); + que.offer(root); + while (!que.isEmpty()) + { + depth ++; + int len = que.size(); + while (len > 0) + { + Node node = que.poll(); + for (int i = 0; i < node.children.size(); i++) + if (node.children.get(i) != null) + que.offer(node.children.get(i)); + len--; + } + } + return depth; + } +} +``` + ## python ### 104.二叉树的最大深度 From 9604cbfe435e6449b7a7c33514dce92b7b2882ff Mon Sep 17 00:00:00 2001 From: yqq Date: Thu, 26 Aug 2021 17:44:27 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A00649=5FDota2=E5=8F=82?= =?UTF-8?q?=E8=AE=AE=E9=99=A2=E7=9A=84Java,=20Python,=20Go=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0649.Dota2参议院.md | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/problems/0649.Dota2参议院.md b/problems/0649.Dota2参议院.md index 9cec7401..e2900824 100644 --- a/problems/0649.Dota2参议院.md +++ b/problems/0649.Dota2参议院.md @@ -10,6 +10,9 @@ # 649. Dota2 参议院 +[力扣题目链接](https://leetcode-cn.com/problems/dota2-senate/) + + Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项: @@ -115,16 +118,102 @@ public: ## Java ```java +class Solution { + public String predictPartyVictory(String senateStr) { + // R = true表示本轮循环结束后,字符串里依然有R。D同理 + Boolean R = true, D = true; + // 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R + int flag = 0; + byte[] senate = senateStr.getBytes(); + while (R && D) { // 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了 + R = false; + D = false; + for (int i = 0; i < senate.length; i++) { + if (senate[i] == 'R') { + if (flag < 0) senate[i] = 0; // 消灭R,R此时为false + else R = true; // 如果没被消灭,本轮循环结束有R + flag++; + } + if (senate[i] == 'D') { + if (flag > 0) senate[i] = 0; + else D = true; + flag--; + } + } + } + // 循环结束之后,R和D只能有一个为true + return R == true ? "Radiant" : "Dire"; + } +} ``` ## Python ```python +class Solution: + def predictPartyVictory(self, senate: str) -> str: + # R = true表示本轮循环结束后,字符串里依然有R。D同理 + R , D = True, True + + # 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R + flag = 0 + + senate = list(senate) + while R and D: # 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了 + R = False + D = False + for i in range(len(senate)) : + if senate[i] == 'R' : + if flag < 0: senate[i] = '0' # 消灭R,R此时为false + else: R = True # 如果没被消灭,本轮循环结束有R + flag += 1 + if senate[i] == 'D': + if flag > 0: senate[i] = '0' + else: D = True + flag -= 1 + # 循环结束之后,R和D只能有一个为true + return "Radiant" if R else "Dire" ``` ## Go ```go + +func predictPartyVictory(senateStr string) string { + // R = true表示本轮循环结束后,字符串里依然有R。D同理 + R, D := true, true + // 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R + flag := 0 + + senate := []byte(senateStr) + for R && D { // 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了 + R = false + D = false + for i := 0; i < len(senate); i++ { + if senate[i] == 'R' { + if flag < 0 { + senate[i] = 0 // 消灭R,R此时为false + } else { + R = true // 如果没被消灭,本轮循环结束有R + } + flag++; + } + if (senate[i] == 'D') { + if flag > 0 { + senate[i] = 0 + } else { + D = true + } + flag-- + } + } + } + // 循环结束之后,R和D只能有一个为true + if R { + return "Radiant" + } + return "Dire"; +} ``` ## JavaScript From 2304a8c57c04b73df80f5e4869d9fd788f116220 Mon Sep 17 00:00:00 2001 From: YiChih Wang Date: Thu, 26 Aug 2021 20:07:46 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A00704.=E4=BA=8C=E5=88=86?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=20Rust=E8=AA=9E=E8=A8=80=E5=AF=A6=E7=8F=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note: - 包含左閉右閉與左閉右開版本 --- problems/0704.二分查找.md | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index e576443e..f2af7daa 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -406,6 +406,49 @@ func search(nums: [Int], target: Int) -> Int { ``` +**Rust:** + +```rust +# (版本一)左闭右闭区间 + +impl Solution { + pub fn search(nums: Vec, target: i32) -> i32 { + let mut left:usize = 0; + let mut right:usize = nums.len() - 1; + while left as i32 <= right as i32{ + let mid = (left + right) / 2; + if nums[mid] < target { + left = mid + 1; + } else if nums[mid] > target { + right = mid - 1; + } else { + return mid as i32; + } + } + -1 + } +} + +# (版本二)左闭右开区间 + +impl Solution { + pub fn search(nums: Vec, target: i32) -> i32 { + let mut left:usize = 0; + let mut right:usize = nums.len(); + while left < right { + let mid = (left + right) / 2; + if nums[mid] < target { + left = mid + 1; + } else if nums[mid] > target { + right = mid; + } else { + return mid as i32; + } + } + -1 + } +} +``` -----------------------