86
题目描述;
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例:
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
mins = ListNode(100)
maxs = ListNode(99)
minb = mins
maxb = maxs
while(head):
if head.val < x:
mins.next = head
mins = mins.next
else:
maxs.next = head
maxs = maxs.next
head = head.next
#print mins.val,maxs.val
if minb.next == None:
return maxb.next
elif maxb.next == None:
return minb.next
else:
maxs.next = None
mins.next = maxb.next
return minb.next
141
题目描述:
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
示例:
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if not head:
return False
while head.next and head.val!=None:
head.val=None #遍历过的值置为空
head=head.next
if not head.next: #如果碰到空发现已经结束,则无环
return False
return True
287
题目描述:
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。
示例:
解答:
class Solution:
def findDuplicate(self, nums: List[int]) -> int:
left=1
right=len(nums)
while left<right:
mid=int(left+(right-left)/2)
cnt=0
for num in nums:
if num<=mid:
cnt+=1
if cnt<=mid:
left=mid+1
else:
right=mid
return right
844
题目描述:
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例:
解答:
class Solution:
def backspaceCompare(self, S: str, T: str) -> bool:
a=[]
b=[]
for i in range(len(S)):
if S[i]!='#':
a.append(S[i])
elif S[i]=='#' and a!=[]:
a.pop()
for i in range(len(T)):
if T[i]!='#':
b.append(T[i])
elif T[i]=='#' and b!=[]:
b.pop()
return a==b
1438
题目描述:
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。
如果不存在满足条件的子数组,则返回 0 。
示例:
解答:
class Solution:
def longestSubarray(self, nums: List[int], limit: int) -> int:
s_min = deque() #单调栈,栈首是当前窗口最小值
s_max = deque() #栈首是当前窗口最大值
length = l = r = 0
while r < len(nums):
if s_max and s_min and s_max[0]-s_min[0] > limit:
if nums[l] == s_max[0]:
s_max.popleft()
if nums[l] == s_min[0]:
s_min.popleft()
l += 1
else:
# 更新当前区间最小值
while s_min and s_min[-1] > nums[r]:
s_min.pop()
s_min.append(nums[r])
# 更新当前区间最大值
while s_max and s_max[-1] < nums[r]:
s_max.pop()
s_max.append(nums[r])
r += 1
if s_max[0]-s_min[0] <= limit:
length = max(length, r-l)
return length