
算法
文章平均质量分 76
luckilyil
本人在学习java中,学习java狠狠大赚一笔,快来关注我一起学习吧
展开
-
Leetcode 每日一题69.x的平方根
简单题{x的平方根}原创 2024-12-16 13:58:39 · 1398 阅读 · 0 评论 -
Leetcode 每日一题66.加一
🌈🌈🌈今天给大家分享的是:leetcode简单题{加一}原创 2024-12-15 15:15:15 · 442 阅读 · 0 评论 -
Leetcode 每日一题9.回文数
给定一个整数 ,我们需要判断它是否是一个回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文数,而 123 不是。不将整数转为字符串,解决这个问题。要判断一个整数是否为回文数,我们可以采用两种方法:这种方法简单直观,但不符合进阶挑战的要求。以下是使用字符串转换法的代码实现:java数学方法这种方法不需要将整数转换为字符串,而是通过数学运算来实现。以下是使用数学方法的代码实现:java算法解释 负数和以0结尾的非0数不是回文数:首先,原创 2024-12-13 17:09:49 · 769 阅读 · 0 评论 -
Leetcode 每日一题 70.爬楼梯
这个问题展示了动态规划的基本思想,即通过解决子问题并将结果存储起来,避免重复计算,从而提高算法的效率。通过这种方法,我们可以有效地解决爬楼梯问题。原创 2024-12-12 14:15:53 · 1121 阅读 · 0 评论 -
Leetcode 每日一题 219.存在重复元素 II
这个问题是一个典型的使用哈希表解决的问题,它考察了我们对哈希表操作的理解和应用。通过维护一个滑动窗口内的元素集合,我们可以有效地检查是否存在满足条件的重复元素。这种方法简洁且高效,是解决这类问题的首选方法。原创 2024-12-11 20:20:04 · 1151 阅读 · 0 评论 -
Leetcode 每日一题 202.快乐数
如果新生成的数已经在哈希集合中,那么我们可以确定这个数不是快乐数,因为它已经进入了循环。在最坏情况下,这个算法的时间复杂度是 O(k),其中 k 是快乐数序列的长度。对于非快乐数,时间复杂度取决于循环的长度,但在实际应用中,这个循环通常不会太长。通过使用哈希集合来记录已经出现过的数,我们可以有效地判断一个数是否为快乐数。:我们使用了一个哈希集合来存储已经出现过的数,因此空间复杂度是 O(k),其中 k 是不同数的数量。:这个方法用于计算给定数的下一个数,即每个位置上的数字的平方和。:这是主要的算法实现。原创 2024-12-10 20:31:07 · 820 阅读 · 0 评论 -
Leetcode 每日一题 1.两数之和
我们可以使用哈希表(HashMap)来解决这个问题。哈希表的键(Key)是数组中的元素,值(Value)是该元素在数组中的索引。这样,我们可以在遍历数组的同时,检查当前元素的补数(即。,请你找出数组中和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。通过使用哈希表,我们可以高效地解决两数之和问题。这种方法的时间复杂度和空间复杂度都是线性的,适合处理大规模数据集。)是否已经在哈希表中。如果在,我们就找到了一对和为目标值的元素,并返回它们的索引。原创 2024-12-09 15:35:46 · 1106 阅读 · 0 评论 -
Leetcode 每日一题 242.有效的字母异位词
虽然排序的方法简单直观,但在某些情况下可能不是最优解。我们可以通过使用哈希表来统计每个字符的出现次数,这样可以将时间复杂度降低到。字母异位词指的是两个字符串包含相同的字符,并且每个字符出现的次数也相同。通过这种方式,我们能够更高效地判断两个字符串是否为字母异位词。,我们需要编写一个函数来判断。原创 2024-12-08 15:28:29 · 757 阅读 · 0 评论 -
Leetcode 每日一题 56.合并区间
合并区间问题是一个经典的算法问题,它考察了对数组操作和排序算法的理解和应用。理解问题:首先要清楚地理解问题的要求,即合并所有重叠的区间,并确保合并后的区间覆盖所有原始区间。明确输入和输出的格式。排序:大多数情况下,解决合并区间问题的第一步是对区间进行排序。通常根据区间的起始位置进行排序,这样可以使得重叠的区间在数组中相邻,便于后续处理。遍历合并:排序完成后,遍历排序后的区间数组,使用一个额外的数据结构(如列表)来存储合并后的区间。对于每个区间,判断它是否与前一个合并区间重叠。原创 2024-12-07 15:43:30 · 843 阅读 · 0 评论 -
Leetcode 每日一题 128.最长连续序列
两种解法都利用了 HashSet 或 HashMap 来减少查找的时间复杂度,使得整体的时间复杂度为 O(n)。HashSet 版的解法更为简洁,而 HashMap 版的解法则提供了一种不同的思路。原创 2024-12-06 22:28:06 · 981 阅读 · 0 评论 -
Leetcode 每日一题 49.字母异位词分组
通过将每个字符串的字母排序,我们可以有效地识别并分组字母异位词。字符串的排序是基于字符的Unicode值进行的,这意味着字符串会按照从第一个字符开始的字典顺序进行排序。解决这个问题的关键在于识别哪些字符串是字母异位词。由于字母异位词的字母种类和数量完全相同,我们可以通过对字符串中的字母进行排序,然后比较排序后的字符串是否相同来判断两个字符串是否为字母异位词。给定一个字符串数组,需要将其中的字母异位词分组。字母异位词是指通过重新排列源单词的所有字母得到的新单词。要求可以按任意顺序返回结果列表。原创 2024-12-05 15:46:45 · 514 阅读 · 0 评论 -
Leetcode 每日一题 290.单词规律
题目要求判断字符串s与给定的规律pattern是否完全匹配,这里的匹配是一种双向连接的对应关系,即pattern里的每个字母要和s中的每个非空单词一一对应,且反之亦然。同时,题目对pattern和s的长度、字符组成以及s的单词分隔形式等都做了相应限定,明确这些要求是正确解题的基础。原创 2024-12-04 17:15:25 · 1070 阅读 · 0 评论 -
Leetcode 每日一题 205.同构字符串
通过使用哈希表存储字符之间的映射关系,我们可以有效地判断两个字符串是否是同构的。这种方法的时间复杂度为 O(n),其中 n 是字符串的长度,空间复杂度也为 O(n),用于存储映射关系。这种方法简单且高效,适用于解决同构字符串问题。原创 2024-12-03 17:40:30 · 967 阅读 · 0 评论 -
Leetcode 每日一题 383.赎金信
通过使用哈希表,我们可以高效地解决这个问题,时间复杂度为线性,空间复杂度为常数。这种方法简单且有效,适用于处理大规模数据。这个问题可以通过使用哈希表(HashMap)来解决。这里的“构成”意味着。中每个字符出现的次数,并检查。中是否有足够的相同字符来构成。原创 2024-12-02 16:22:09 · 835 阅读 · 0 评论 -
2024年计算机能力挑战赛java国赛
说起来也很巧,决赛的题目有2道题我最近刷leetcode的时候做过。决赛没有选择题,有5道编程题,在2个小时内解出,感觉总体来说,还是比较简单。原创 2024-12-01 19:35:00 · 1145 阅读 · 2 评论 -
Leetcode 每日一题 104.二叉树的最大深度
两种方法都可以有效地求解二叉树的最大深度问题。BFS 方法在遍历过程中逐层计算深度,而递归方法利用了树的结构特性进行求解。根据具体的应用场景和偏好,可以选择适合的方法。BFS 是一种遍历树的层序方法,它从根节点开始,逐层遍历树的每个节点。在每一层,我们记录节点的数量,直到遍历完所有节点。递归方法利用了二叉树的最大深度属性:一个节点的最大深度是其左子树和右子树最大深度的最大值加 1。,我们需要返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。原创 2024-11-29 18:33:41 · 610 阅读 · 0 评论 -
Leetcode 每日一题 36.有效的数独
为了判断数独的有效性,我们需要检查每一行、每一列以及每一个 3x3 宫格中的数字是否重复。遍历整个棋盘,对于每个非空白的单元格,我们检查其对应的行、列和宫格中该数字是否已经出现过。如果出现过,则数独无效;否则,我们更新对应的计数器。给定一个 9x9 的数独棋盘,我们需要判断棋盘上已填入的数字是否有效。,其中每个元素是一个字符,表示数独棋盘上的数字或空白。输出:一个布尔值,如果数独有效返回。输入:一个 9x9 的二维数组。原创 2024-11-28 16:54:14 · 1180 阅读 · 0 评论 -
Leetcode 每日一题 30.串联所有单词的子串
这个问题考察了滑动窗口和哈希表的应用,通过维护一个当前窗口内单词的出现次数,我们可以有效地检查每个可能的子串是否满足条件。这种方法的时间复杂度为 O(n * m),其中 n 是words数组的长度,m 是字符串s的长度。原创 2024-11-27 16:01:22 · 784 阅读 · 0 评论 -
Leetcode 每日一题 3.无重复字符的最长子串
我们需要找出其中不含有重复字符的最长子串的长度。子串是指字符串中连续的字符序列,而子序列则是字符序列,但不必连续。指针,直到窗口内没有重复字符为止。在这个过程中,我们记录并更新最长子串的长度。这个问题可以通过滑动窗口的方法来解决。我们使用一个哈希集合(指针的移动,我们不断扩展窗口,如果遇到重复的字符,就移动。)来存储当前窗口内的字符,同时使用两个指针()来表示窗口的边界。原创 2024-11-26 18:23:31 · 809 阅读 · 0 评论 -
Leetcode 每日一题 209.长度最小的子数组
对于进阶要求,我们可以利用二分查找来优化滑动窗口的缩小过程,从而将时间复杂度降低到 O(n log(n))。这种方法的核心思想是在满足条件的窗口内,使用二分查找来确定可以向左扩展的最远距离。这个问题可以通过滑动窗口的方法来解决,时间复杂度为 O(n)。滑动窗口是一种常见的解决子数组问题的方法,它通过维护一个窗口来遍历数组,窗口内的元素和满足一定的条件。O(n) 的解法适用于大多数情况,而 O(n log(n)) 的解法则在某些特定情况下可以提供更好的性能。是满足条件的最短子数组。是满足条件的最短子数组。原创 2024-11-25 14:34:16 · 572 阅读 · 0 评论 -
滑动窗口算法
滑动窗口算法以其高效性和实用性,在字符串处理领域中占有一席之地。通过本文的介绍,希望你能对滑动窗口算法有一个全面的了解,并能在实际问题中灵活运用。无论是在算法竞赛还是工业界,滑动窗口算法都是一个强大的工具,能够帮助你解决各种问题。在实际应用中,滑动窗口算法的变体和优化策略可以进一步提升性能。例如,在电商系统中,滑动窗口算法可以用于分析交易数据、用户行为和优化库存管理等方面。此外,滑动窗口算法在网络协议中的流量控制和拥塞控制、数据库查询优化以及机器学习特征提取等领域也有广泛的应用。原创 2024-11-24 18:10:07 · 748 阅读 · 0 评论 -
Leetcode 每日一题 15.三数之和
通过排序和双指针法,我们不仅解决了“三数之和”问题,还展示了如何利用数组的特性来优化算法。这种方法的时间复杂度和空间复杂度都非常低,适用于处理大规模数据集。希望这篇文章能够帮助你深入理解排序和双指针法,并将其应用到实际问题中。如果你有任何疑问或想要进一步探讨,欢迎在评论区交流。让我们一起进步,一起成长!原创 2024-11-24 10:47:03 · 514 阅读 · 0 评论 -
Leetcode 每日一题 11. 盛最多水的容器
通过双指针法,我们不仅解决了“接雨水”问题,还展示了如何利用数组的特性来优化算法。这种方法的时间复杂度和空间复杂度都非常低,适用于处理大规模数据集。希望这篇文章能够帮助你深入理解双指针法,并将其应用到实际问题中。如果你有任何疑问或想要进一步探讨,欢迎在评论区交流。让我们一起进步,一起成长!原创 2024-11-22 20:26:07 · 735 阅读 · 0 评论 -
Leetcode 每日一题 167 .两数之和
这个问题可以通过双指针法来解决。由于数组已经排序,我们可以利用这一点来优化搜索过程。返回这两个数的下标,下标从 1 开始计数。,找出数组中两个数,使得它们的和等于。给定一个按非递减顺序排列的整数数组。原创 2024-11-21 14:33:50 · 547 阅读 · 0 评论 -
Leetcode 每日一题 392.判断子序列
的检查,我们可以使用更高效的算法,比如后缀数组或后缀树,这些数据结构可以更快地判断子序列。的规模,我们需要优化存储方案,可能需要使用分布式存储系统来存储所有的。中的当前字符相等,如果相等,则两个指针同时前进;子序列是指在不改变剩余字符相对位置的情况下,通过删除。对于这个问题,我们可以采用双指针的方法来解决。进行预处理,建立一个字符到索引列表的映射,这样对于每个。的规模非常大,我们可以利用并行计算来加速处理过程。,我们可以缓存它们的结果,避免重复计算。的一个子序列,因为可以删除。中的位置,而不是每次都遍历。原创 2024-11-19 15:27:33 · 561 阅读 · 0 评论 -
Leetcode 每日一题 6.Z字形变换
行进行Z字形排列,然后从左到右逐行读取,生成一个新的字符串。这里的关键是理解Z字形排列的规则,以及如何通过编程实现这种排列。我们选择使用数组来实现这个算法,因为数组的直接索引特性使得我们能够更直观地模拟Z字形的行进过程。,以从上往下、从左到右进行 Z 字形排列。中的字符串拼接起来,形成最终的结果。来记录当前行,初始值为0。的每个字符,将字符添加到对应的。数组,用于存储每一行的字符。题目要求将一个给定的字符串。等于1,直接返回原始字符串。,因为不需要任何变换。:遍历结束后,将所有。原创 2024-11-18 14:29:47 · 499 阅读 · 0 评论 -
Java在算法竞赛中的常用方法
在算法竞赛中,Java以其强大的标准库和高效的性能成为了众多参赛者的首选语言。本文将详细介绍Java在算法竞赛中的常用集合、字符串处理、进制转换、大数处理以及的使用技巧,帮助你在竞赛中更加得心应手。原创 2024-11-16 19:50:16 · 712 阅读 · 0 评论 -
Leetcode 每日一题 151.反转字符串中的单词
其中包含由空格分隔的单词。任务是反转字符串中单词的顺序,同时确保单词之间仅用单个空格分隔,并且结果字符串中不包含前导空格和尾随空格。原创 2024-11-16 14:21:32 · 437 阅读 · 0 评论 -
Leetcode 每日一题 125.验证回文串
给定一个字符串s,我们需要判断它是否是一个回文串。但在此之前,我们需要将所有大写字符转换为小写字符,并移除所有非字母数字字符。只有经过这样处理后的字符串,我们才进行回文检测。原创 2024-11-14 15:42:12 · 441 阅读 · 0 评论 -
Leetcode 每日一题 28.找出字符串中第一个匹配的下标
暴力搜索算法是一种简单直观的字符串匹配方法。的每个可能的起始位置开始,检查是否有与。字符串的第一个匹配项的下标。的一部分,则返回 -1。原创 2024-11-13 22:37:37 · 311 阅读 · 0 评论 -
Leetcode 每日一题 14.最长公共前缀
解决这个问题的关键在于比较字符串数组中每个字符串的每个字符。,我们需要找出这些字符串的最长公共前缀。如果不存在公共前缀,则返回空字符串。原创 2024-11-12 18:19:37 · 595 阅读 · 0 评论 -
Leetcode 每日一题 58.最后一个单词的长度
这个问题是一个典型的字符串处理问题,它涉及到字符串的遍历和条件判断。通过从字符串的末尾开始遍历,并使用一个布尔变量来标记是否处于单词中,我们可以有效地找到最后一个单词并计算其长度。这种方法简单而高效,适用于处理包含空格和单词的字符串。原创 2024-11-11 21:07:40 · 668 阅读 · 0 评论 -
Leetcode 每日一题 12.整数转罗马数字
我们可以通过迭代的方式,从最大的罗马数字开始,逐步减去对应的数值,直到剩余的数值小于当前的罗马数字值。这样,我们可以构建出整个罗马数字字符串。将一个整数转换为罗马数字。罗马数字是由特定的符号组合而成的,每个符号代表不同的数值。给定一个整数,编写一个函数将其转换为罗马数字。原创 2024-11-10 12:53:23 · 341 阅读 · 0 评论 -
Leetcode 每日一题 13.罗马数字转整数
本题考查了字符串的处理和条件判断的应用。通过仔细分析罗马数字的规则,我们可以设计出有效的算法来解决这个问题。原创 2024-11-09 11:36:53 · 856 阅读 · 0 评论 -
Leetcode 每日一题 134.加油站
我们需要找出一个加油站,使得从这个加油站出发,按顺序绕环路行驶一周后能够返回到这个加油站。:从找到的起始点开始,我们尝试按顺序遍历所有加油站,检查在遍历过程中油量是否始终非负。如果是,则返回起始点的编号。这个问题的难点在于如何高效地判断是否存在一个加油站可以完成环路行驶,并且找出这个加油站。:如果从某个起始点开始遍历时油量变为负数,我们重置起始点,继续验证下一个可能的起始点。在这个问题中,我们有一个环形的环路,上面有。解释:从3号加油站出发,可以完成环路行驶。:首先,我们计算每个加油站的净油量,即。原创 2024-11-08 20:56:23 · 482 阅读 · 0 评论 -
Leetcode 每日一题 135.分发糖果
这个问题的难点在于如何高效地分配糖果,同时满足每个孩子至少得到1个糖果,以及评分高的孩子得到更多糖果的条件。数组,如果当前孩子的评分高于前一个孩子的评分,并且前一个孩子的糖果数不小于当前孩子的糖果数(即。解释:给第一个、第二个、第三个孩子分别分发1、2、1颗糖果。),则下一个孩子的糖果数至少为当前孩子的糖果数加1(即。),则前一个孩子的糖果数更新为当前孩子的糖果数加1(即。数组,如果当前孩子的评分低于下一个孩子的评分(即。数组,将所有孩子的糖果数相加,得到总糖果数。:为每个孩子分配1个糖果,用数组。原创 2024-11-08 20:49:51 · 547 阅读 · 0 评论