Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对0034.在排序数组中查找元素的第一个和最后一个位置中python代码块语法进行修正,并添加新解法。补充0203.移除链表元素使用原先链表的python解法 #2901

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -397,38 +397,74 @@ 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]
```
```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};
Expand Down
25 changes: 24 additions & 1 deletion problems/0203.移除链表元素.md
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,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):
Expand Down