目录
一、Leetcode234回文链表
题目描述
给你一个单链表的头节点 head ,请你判断该链表是否为
回文链表
。如果是,返回 true ;否则,返回 false 。
题目链接:力扣题目链接
解题思路
- 把链表放入数组比较好操作
- 用切片证明回文
- 用双指针证明回文
方法:双指针
- 用left,right从数组两端往中间走
- 条件为while left < right
- 不相等就返回false
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def isPalindrome(self, head: Optional[ListNode]) -> bool:
# 将链表放入数组
cur = head
nums = []
while cur:
nums.append(cur.val)
cur = cur.next
# 用数组切片判断是否回文
# return nums == nums[::-1]
# 用双指针判断是否回文
left, right = 0, len(nums)-1
while left < right:
if nums[left] == nums[right]:
left += 1
right -= 1
else:
return False
return True
总结
- 链表不好操作就放入数组
- 数组切片,双指针都很好用!!!
二、Leetcode160相交链表
题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
题目链接:力扣题目链接
解题思路
- 把链表放到数组操作
- 相交链表尾部对齐,从后往前找
方法:链表转数组
- 将节点放入数组
- 尾部对齐,从数组的下标-1开始找
- 找到相等的就返回节点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
# 转换成数组
a = []
b = []
cur = headA
cur2 = headB
while cur:
a.append(cur)
cur = cur.next
while cur2:
b.append(cur2)
cur2 = cur2.next
intersection_node = None
for i in range(1, min(len(a), len(b)) + 1):
if a[-i] == b[-i]:
intersection_node = a[-i]
return intersection_node
总结
- 注意返回节点,所以放入数组的就是节点不是val
- 从后往前遍历
i in range(1,len()+1)
操作a[-i]
三、Leetcode1934确认率
题目描述
用户的 确认率 是 ‘confirmed’ 消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为 0 。确认率四舍五入到 小数点后两位 。
编写一个SQL查询来查找每个用户的 确认率 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
题目链接:力扣题目链接
解题思路
- 确认率比较难计算
round取小数点后两位
ifnull(X,0)没有值就返回0
avg()计算平均值
方法:round, ifnum(), avg()
# Write your MySQL query statement below
select
s.user_id,
round(ifnull(avg(c.action = "confirmed"), 0), 2) as confirmation_rate
from
Signups as s
left join
Confirmations as c
on s.user_id = c.user_id
group by
s.user_id
总结
- avg()直接取分子,下面group by会给分母
- round()和ifnull()用法
四、Leetcode2356每位教师所教授的科目总类的数量
题目描述
查询每位老师在大学里教授的科目种类的数量。
以 任意顺序 返回结果表。
查询结果格式示例如下。
题目链接:力扣题目链接
解题思路
- 根据每个teacher_id找不重复的subject_id
方法:count, distinct
# Write your MySQL query statement below
select
teacher_id,
count(distinct(subject_id)) as cnt
from
Teacher
group by
teacher_id
总结
- count和distinct思路还是比较好想到的
心得:算法练习第二天了,保持做题的手感,有空要回去练练回溯,贪心和动态规划了…