From 8bdfb00753114484a70649ebd1a94a002fbd3f30 Mon Sep 17 00:00:00 2001 From: Jason <2063055270@qq.com> Date: Sat, 22 Feb 2025 10:46:23 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=AD=A30034=E4=B8=ADpython?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=9D=97=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\344\270\252\344\275\215\347\275\256.md" | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git "a/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" "b/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" index 16adcdf19c..118b810dcd 100644 --- "a/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" +++ "b/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" @@ -399,34 +399,34 @@ class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: def getRightBorder(nums:List[int], target:int) -> int: left, right = 0, len(nums)-1 - rightBoder = -2 # 记录一下rightBorder没有被赋值的情况 + rightBorder = -2 # 记录一下rightBorder没有被赋值的情况 while left <= right: middle = left + (right-left) // 2 if nums[middle] > target: right = middle - 1 else: # 寻找右边界,nums[middle] == target的时候更新left left = middle + 1 - rightBoder = left + rightBorder = left - return rightBoder + return rightBorder def getLeftBorder(nums:List[int], target:int) -> int: left, right = 0, len(nums)-1 - leftBoder = -2 # 记录一下leftBorder没有被赋值的情况 + leftBorder = -2 # 记录一下leftBorder没有被赋值的情况 while left <= right: middle = left + (right-left) // 2 if nums[middle] >= target: # 寻找左边界,nums[middle] == target的时候更新right right = middle - 1 - leftBoder = right + leftBorder = right else: left = middle + 1 - return leftBoder - leftBoder = getLeftBorder(nums, target) - rightBoder = getRightBorder(nums, target) + return leftBorder + leftBorder = getLeftBorder(nums, target) + rightBorder = getRightBorder(nums, target) # 情况一 - if leftBoder == -2 or rightBoder == -2: return [-1, -1] + if leftBorder == -2 or rightBorder == -2: return [-1, -1] # 情况三 - if rightBoder -leftBoder >1: return [leftBoder + 1, rightBoder - 1] + if rightBorder -leftBorder >1: return [leftBorder + 1, rightBorder - 1] # 情况二 return [-1, -1] ``` From 5627bb568dbc8cf91dbf7ae30e96671541e82c1a Mon Sep 17 00:00:00 2001 From: Jason <2063055270@qq.com> Date: Sat, 22 Feb 2025 11:33:25 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A00034python=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=8E=9F=E5=A7=8B=E8=A7=A3=E6=B3=95=E7=9A=84=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\344\270\252\344\275\215\347\275\256.md" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git "a/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" "b/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" index 118b810dcd..393894383e 100644 --- "a/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" +++ "b/problems/0034.\345\234\250\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\346\237\245\346\211\276\345\205\203\347\264\240\347\232\204\347\254\254\344\270\200\344\270\252\345\222\214\346\234\200\345\220\216\344\270\200\344\270\252\344\275\215\347\275\256.md" @@ -431,6 +431,42 @@ class Solution: return [-1, -1] ``` ```python +# 解法1的代码简化,直接使用left和right值作为左右边界标记 +class Solution: + def searchRange(self, nums: List[int], target: int) -> List[int]: + # 查找左边界(第一个等于 target 的位置) + def getLeftBorder(nums: List[int], target: int) -> int: + left, right = 0, len(nums) - 1 + while left <= right: + middle = left + (right - left) // 2 + if nums[middle] >= target: # nums[middle] >= target 时,继续向左查找 + right = middle - 1 + else: + left = middle + 1 + return left + + # 查找右边界(最后一个等于 target 的位置) + def getRightBorder(nums: List[int], target: int) -> int: + left, right = 0, len(nums) - 1 + while left <= right: + middle = left + (right - left) // 2 + if nums[middle] > target: # nums[middle] > target 时,继续向右查找 + right = middle - 1 + else: + left = middle + 1 + return right + + # 查找左边界和右边界 + leftBorder = getLeftBorder(nums, target) + rightBorder = getRightBorder(nums, target) + + # 判断目标值是否存在 + if leftBorder <= rightBorder: + return [leftBorder, rightBorder] + else: + return [-1, -1] +``` +```python # 解法2 # 1、首先,在 nums 数组中二分查找 target; # 2、如果二分查找失败,则 binarySearch 返回 -1,表明 nums 中没有 target。此时,searchRange 直接返回 {-1, -1}; From 0733b32ea9f93666e5a0201ac43f68999972ec51 Mon Sep 17 00:00:00 2001 From: Jason <2063055270@qq.com> Date: Wed, 26 Feb 2025 11:24:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=A1=A5=E5=85=850203.=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=93=BE=E8=A1=A8=E5=85=83=E7=B4=A0=E4=BD=BF=E7=94=A8=E5=8E=9F?= =?UTF-8?q?=E6=9D=A5=E9=93=BE=E8=A1=A8=E7=9A=84python=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...76\350\241\250\345\205\203\347\264\240.md" | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git "a/problems/0203.\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md" "b/problems/0203.\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md" index 5a4bbb7423..9a60cd7741 100644 --- "a/problems/0203.\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md" +++ "b/problems/0203.\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md" @@ -369,9 +369,32 @@ class Solution { ``` ### Python: +用原来的链表操作: +```python +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]: + while head != None and head.val == val: + head = head.next + cur = head + while cur != None and cur.next != None: + check = cur.next + if check.val == val: + cur.next = check.next + check = check.next + else: + cur = cur.next + check = check.next + return head + +``` ```python -(版本一)虚拟头节点法 +虚拟头节点法 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None):