Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

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

Open
2021113691 wants to merge 5 commits into youngyangyang04:master
base: master
Choose a base branch
Loading
from 2021113691:master
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
View file Open in desktop
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
View file Open in desktop
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

AltStyle によって変換されたページ (->オリジナル) /