2023-07-17力扣今日三题
发布人:shili8
发布时间:2025-01-11 15:59
阅读次数:0
**力扣今日三题**
今天,我们将解决三个有趣的问题。第一个问题是关于寻找最长的连续序列,第二个问题是关于判断两个链表是否相交,第三个问题是关于找到旋转后的数字。
###1. 最长的连续序列**描述:**
给定一个整数数组 `nums`,请返回长度为 `k` 的最长连续子序列。这个子序列可以从左到右或从右到左读取。
**示例:**
* 输入:`nums = [1,2, -1, -4, -3,6], k =2`
输出:`[1, -1]`
* 输入:`nums = [1,2, -1, -4, -3,6], k =5`
输出:`[1,2, -1, -4, -3]`
**代码:**
class Solution: def longestConsecutive(self, nums: List[int]) -> int: num_set = set(nums) max_length =0 for num in num_set: if num -1 not in num_set: current_num = num current_length =1 while current_num +1 in num_set: current_num +=1 current_length +=1 max_length = max(max_length, current_length) return max_length
###2. 判断两个链表是否相交**描述:**
给定两个链表 `headA` 和 `headB`,请返回它们是否相交。
**示例:**
* 输入:`list1 = [4,3,2,1], list2 = [5,0,11]`
输出:`False`
* 输入:`list1 = [8,6,7,3,-1,0,5], list2 = [2,4,3]`
输出:`True`
**代码:**
class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]: if not headA or not headB: return None p1 = headA p2 = headB while p1 != p2: p1 = p1.next if p1 else headB p2 = p2.next if p2 else headA return p1
###3. 找到旋转后的数字**描述:**
给定一个旋转后的整数 `num`,请返回原来的数字。
**示例:**
* 输入:`num =109`, 旋转次数为 `2`
输出:`91`
* 输入:`num =1000`, 旋转次数为 `5`
输出:`100`
**代码:**
class Solution: def rotatedDigits(self, num: int) -> int: if num < 10 or (num >=20 and num %11 !=0): return -1 digits = [] while num >0: digit = num %10 if digit ==6 or digit ==9: digits.append(digit) elif digit ==3 or digit ==4 or digit ==7: return -1 else: digits.append(digit) num //=10 return int(''.join(map(str, reversed(digits))))
以上就是今天的三个问题。希望你能解决它们!