2021-2022算法练习
matrix_studio
Happy learning, happy coding, happy earning!!!
展开
-
CF135E Weak Subsequence(弱子串)
弱子串分析,无代码无答案原创 2022-10-14 17:22:15 · 215 阅读 · 0 评论 -
day27 第三大的数(leetcode)
414. 第三大的数题目描述给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。提示:1 &l原创 2022-01-06 10:19:12 · 75 阅读 · 0 评论 -
day26 合并区间(LeetCode)
56. 合并区间题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals原创 2022-01-05 15:18:59 · 77 阅读 · 0 评论 -
day25 多数元素(leetcode)
169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。解题1. 哈希计数直接用哈希表计数,返回大于n/2的元素class Solution: def majorityEle原创 2022-01-04 21:10:23 · 175 阅读 · 0 评论 -
day24 和为s的连续正数序列(leetcode 剑指 Offer 57 - II)
剑指 Offer 57 - II. 和为s的连续正数序列题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5解题:暴力破解class Solu原创 2022-01-01 21:46:46 · 199 阅读 · 0 评论 -
day23 完美数(leetcode)
507. 完美数题目描述对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个 整数 n, 如果是完美数,返回 true,否则返回 false示例 1:输入:num = 28输出:true解释:28 = 1 + 2 + 4 + 7 + 141, 2, 4, 7, 和 14 是 28 的所有正因子。示例 2:输入:num = 6输出:true示例 3:输入:num = 496输出:true示例 4:输入:num = 8128输原创 2021-12-31 21:41:15 · 289 阅读 · 0 评论 -
day22 计数质数(leetcode)
204. 计数质数题目描述统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 * 106解题法一:枚举想多了,python枚举直接超时法二:筛我们要求n以内的质数。用一个列表来标记这些数的性质(质数是0,合数是1)。从2开始,2肯定是质数,我们计数并将2原创 2021-12-30 18:26:21 · 1527 阅读 · 0 评论 -
day21 统计平方和三元组的数目(python)
1925. 统计平方和三元组的数目题目描述一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 a,b 和 c 。给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。示例 1:输入:n = 5输出:2解释:平方和三元组为 (3,4,5) 和 (4,3,5) 。示例 2:输入:n = 10输出:4解释:平方和三元组为 (3,4,5),(4,3,5),(6,8,10) 和 (8,6,10) 。原创 2021-12-29 21:57:55 · 648 阅读 · 0 评论 -
day21 重复至少 K 次且长度为 M 的模式(leetcode)
1566. 重复至少 K 次且长度为 M 的模式题目描述:给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。如果数组中存在至少重复 k 次且长度为 m 的模式,则返回 true ,否则返回 false 。示例 1:输入:arr = [1,2,4,4,4,4], m = 1, k = 3输出:true解释:模式 (4) 的长度为 1 ,且连续重复原创 2021-12-28 17:14:12 · 119 阅读 · 0 评论 -
day20 统计好三元组(leetcode)
1534. 统计好三元组题目描述给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。0 <= i < j < k < arr.length|arr[i] - arr[j]| <= a|arr[j] - arr[k]| <= b|arr[i] - arr[k]| <= c其中 |x| 表示 x 的绝对值。返回原创 2021-12-27 21:21:44 · 228 阅读 · 0 评论 -
day19 递增顺序搜索树(leetcode)
897. 递增顺序搜索树给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]示例 2:输入:root = [5,1,7]输出:[1,null,5,null,7]提原创 2021-12-26 17:33:40 · 63 阅读 · 0 评论 -
day18 对称的二叉树(剑指 Offer 28)
剑指 Offer 28. 对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:tru原创 2021-12-26 17:13:15 · 337 阅读 · 0 评论 -
day17 二叉搜索树中两个节点之和(剑指 Offer II 056)
剑指 Offer II 056. 二叉搜索树中两个节点之和题目:给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。示例 1:输入: root = [8,6,10,5,7,9,11], k = 12输出: true解释: 节点 5 和节点 7 之和等于 12示例 2:输入: root = [8,6,10,5,7,9,11], k = 22输出: false解释: 不存在两个节点值之和为原创 2021-12-25 21:26:32 · 527 阅读 · 0 评论 -
day13 平衡二叉树(leetcode 剑指 Offer 55 - II)
剑指 Offer 55 - II. 平衡二叉树题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \原创 2021-12-24 21:04:33 · 881 阅读 · 0 评论 -
day16 二叉搜索树中的搜索(leetcode)
700. 二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。解题原创 2021-12-23 20:52:49 · 174 阅读 · 0 评论 -
day15 二叉树的直径(leetcode)
543. 二叉树的直径题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。解题:递归class Solution:原创 2021-12-23 20:43:31 · 905 阅读 · 0 评论 -
day14 二叉搜索树节点最小距离(leetcode)
783. 二叉搜索树节点最小距离给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。示例 1:输入:root = [4,2,6,1,3]输出:1示例 2:输入:root = [1,0,48,null,null,12,49]输出:1提示:树中节点的数目范围是 [2, 100]0 <= Node.val <= 105解题:1. 二叉搜索树:二叉树是一种树的特殊形式,它的每个节点最多两个孩子节原创 2021-12-23 17:52:32 · 106 阅读 · 0 评论 -
day13 合并两个排序的链表(leetcode剑指Offer25)
剑指 Offer 25. 合并两个排序的链表题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000解题:class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNod原创 2021-12-23 17:08:40 · 546 阅读 · 0 评论 -
day12 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解题:法一:反转数组遍历整个链表,将数据存在数组里,并反转数组class Solution: def reversePrint(self, head: ListNode) -> List[int]: lst = []原创 2021-12-23 16:55:59 · 55 阅读 · 0 评论 -
day11 回文链表(leetcode)
回文链表题目:编写一个函数,检查输入的链表是否是回文的。解题:用列表直接存储快慢指针找到链表的中间节点,然后反转链表进行判断,最后再讲链表还原代码:法一class Solution: def isPalindrome(self, head: ListNode) -> bool: lst, cur = [], head while cur: lst.append(cur.val) cur = cu原创 2021-12-13 12:41:36 · 246 阅读 · 0 评论 -
Java SE常用类 - String 练习
将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”package com.nuo.testString;/** * @author nuo * @version 1.0 * @description: TODO 将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg” * @date 2021/12/12 0:31 */public class testString_10_2 { public s原创 2021-12-12 18:57:02 · 200 阅读 · 0 评论 -
day10 二进制链表转整数(leetcode)
1290. 二进制链表转整数题目:给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。解题:python中int()可以将指定进制的数转换为10进制代码:class Solution: def getDecimalValue(self, head: ListNode) -> int: strs = '' while head:原创 2021-12-12 12:32:39 · 655 阅读 · 0 评论 -
day9 链表的中间结点(leetcode)
876. 链表的中间结点题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.原创 2021-12-11 12:33:03 · 317 阅读 · 0 评论 -
day8 移除链表元素(leetcode)
203. 移除链表元素题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。解题:核心思想:遍历列表,遇到符合题目条件的删除细节:要在头节点前设立头指针,为了在链表中第一个节点就要被删时服务删除节点时,我们通常需要前一个节点的指针。所以,我们通常直接基于“前一个指针”,然后直接对后面的节点进行判断,符合条件的直接删除推动循环的条件不是统一的cur = cur.next。我们只在确定了下一个节点不会被原创 2021-12-11 10:33:27 · 217 阅读 · 0 评论 -
day7 相交链表(leetcode)
160. 相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。解题:双指针如果两条链表有交点且不一样长:我们让两个指针走共同的长度(链表A独立的部分+共同链表的长度+链表B独立的部分),最终在同一点相遇。如果两条链表没有交点:两个指针在走完同样的长度(链表A+链表B)后同时为空,并返回空如果两个链表有交点且一样长:两个指针会直接在节点相遇所以,我们的目的是让他们走相同的长度,并返回“相遇”的节点原创 2021-12-09 12:09:21 · 409 阅读 · 0 评论 -
day6 删除链表的倒数第 N 个结点(leetcode)
19. 删除链表的倒数第 N 个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz原创 2021-12-08 12:37:41 · 158 阅读 · 0 评论 -
day5 删除排序链表中的重复元素(leetcode)
83. 删除排序链表中的重复元素题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。代码监测到重复元素就直接丢掉class Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: if not head: return head cur = head原创 2021-12-07 10:37:41 · 164 阅读 · 0 评论 -
day4 反转链表(leetcode)
206. 反转链表题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路设置三个指针:pre记录反转后链表的头节点;cur记录未反转链表的头节点;pos记录未反转链表的下一个节点每次操作的核心节点cur是未反转链表的头节点,我们在记录下cur的下一个节点pos后,将cur指向反转后链表的头节点pre然后更新节点数据:令pre=cur,cur=pos,pos=cur.next最后重复操作2几个需要注意的点:开始时记得初始化节点,反转第一个节点时要让它指向None对原创 2021-12-06 12:06:41 · 177 阅读 · 0 评论 -
day3 回文数(leetcode)
9. 回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。思路:整数转字符串字符串切片取反直接比较两者是否一样代码:class Solution: def isPalindrome(self, x: int) -> bool: return True if str(x) == str(x)[::-1] else F原创 2021-12-04 14:15:31 · 189 阅读 · 0 评论 -
day2整数反转(leetcode)
7. 整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。思路判断正负性并记录绝对值取正int,转str,切片反转,再转int根据记录添加正负号判读是否符合题目要求的区间返回结果代码class Solution: def reverse(self, x: int) -> int:原创 2021-12-03 10:40:40 · 172 阅读 · 0 评论 -
day1:两数之和(leetcode)
1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], t原创 2021-12-02 11:09:54 · 65 阅读 · 0 评论