算法
文章平均质量分 70
LeetCode算法题
人不走空
愿在csdn的海洋中,与诸位共创诗意般的程序世界
展开
-
令人膛目结舌的代码技巧:探索编程世界奇妙之处(3)
函数式编程的绝妙之道展示了一种不同于传统命令式编程的编码范式,通过强调纯函数、不可变性和高阶函数等概念,为程序员提供了更为抽象和灵活的编程方式。通过深入理解这些概念和技巧,我们能够更好地应用函数式编程的绝妙之道,使得代码更为优雅和易于维护。在下一章节中,我们将继续探讨更多令人膛目结舌的代码技巧,继续揭示编程的魔法之美。在这篇博客的最后,我们将对前述的代码技巧进行总结,并展望未来可能出现的更为令人惊叹的编码技术。通过深入研究这些技巧,我们不仅可以提升自己的编码水平,也能更好地理解和欣赏其他程序员的精彩之处。原创 2023-12-18 20:02:52 · 902 阅读 · 0 评论 -
令人膛目结舌的代码技巧:探索编程世界奇妙之处(2)
链式比较是一种简洁而有趣的编码方式,使得条件判断更加数学化和清晰。通过深入理解其原理和实际应用,我们可以更好地运用这种技巧,使得代码更为简洁、优雅。在下一章节中,我们将探讨更多令人膛目结舌的代码技巧,继续揭示编程的魔法之美。装饰器是Python中一项强大的特性,其魔法力量在于可以动态地增强函数的功能,使得代码更加模块化和可扩展。通过深入理解装饰器的原理和实际应用,我们能够更好地运用这一高级特性,提高代码的灵活性和可读性。在下一章节中,我们将继续探讨更多令人膛目结舌的代码技巧,继续揭示编程的魔法之美。原创 2023-12-18 16:07:41 · 815 阅读 · 0 评论 -
令人膛目结舌的代码技巧:探索编程世界奇妙之处(1)
变量交换的巧妙之法展示了程序员对语言特性的深刻理解以及对问题的独特解决思路。这种技巧或许不适用于所有场景,但它确实让我们对编程语言的底层原理有了更深的认识。在编码的过程中,我们可以灵活运用这些技巧,以更加巧妙的方式解决问题。在接下来的章节中,我们将继续探讨其他令人膛目结舌的代码技巧。列表推导式以其简洁、优雅的语法,成为Python程序员处理列表的利器。通过深入理解其语法结构和实际应用,我们能更好地运用这一技巧,使代码更为清晰、简洁。在下一章节中,我们将探讨更多令人膛目结舌的代码技巧,继续发现编程的魔法之美。原创 2023-12-18 11:25:44 · 979 阅读 · 0 评论 -
力扣1445 连续字符
这种解法的时间复杂度是 O(n),其中 n 是输入字符串的长度,因为你只需要遍历一次字符串。这个问题的解法相对比较简单,可以通过遍历字符串,计算每个字符的连续出现次数,然后找出最大的连续次数即可。如果当前字符与前一个字符相同,说明有连续的字符出现,此时增加。如果当前字符与前一个字符不同,说明连续的字符中断了,此时将。子字符串 "eeeee" 长度为 5 ,只包含字符 'e'。循环遍历字符串,从第二个字符开始比较当前字符与前一个字符。定义为:只包含一种字符的最长非空子字符串的长度。,即最大的连续次数。原创 2023-12-09 00:20:23 · 1249 阅读 · 0 评论 -
快速排序的新用法
快速排序是一种高效的排序算法,利用分治的思想进行排序。它的基本原理是在待排序的n个数据中任取一个数据为分区标准,把所有小于该排序码的数据移到左边,把所有大于该排序码的数据移到右边,中间放所选记录,称之为一趟排序。然后,对前后两个子序列重复上述过程,直到所有记录都排好序。通俗点说,大致过程是对于一个无序序列,找到一个"哨兵数",将序列中所有比哨兵数小的数字都移在哨兵数的左边,所有比哨兵数大的数字都移在哨兵数的右边;然后分别对哨兵数左边和右边再使用同样的方法找到新的哨兵数,并再次进行分类,直到集合不可分割为止。原创 2023-12-04 09:55:01 · 1907 阅读 · 0 评论 -
HashMap的详细解读
如果哈希表已经满了,那么会进行扩容,即创建一个新的哈希表,大小是原来的两倍,并将原来哈希表中的所有元素重新插入到新的哈希表中。因此,在设计HashMap时,需要考虑哈希表的大小和加载因子,以平衡性能和内存使用。其中,put和get方法是HashMap中最常用的方法,它们的实现涉及到哈希表的查找和插入操作。其中,HashMap的核心是它的哈希表(由table数组实现),每个元素都是一个Node对象,其中包含键值对。然后,在该桶中查找链表或红黑树,直到找到对应的元素或到达链表的尾部或红黑树的叶节点。原创 2023-11-21 09:08:15 · 323 阅读 · 0 评论 -
[Java·算法·中等] LeetCode274. H指数 详细解读
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。原创 2023-11-07 16:37:46 · 71 阅读 · 0 评论 -
[Java·算法·中等] LeetCode274. H指数 详细解读
这段代码的时间复杂度主要来自数组的排序,排序算法的时间复杂度为 O(nlogn),其中 n 是引用次数数组的长度。由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。循环继续,直到不再满足循环条件,这意味着没有更多的论文可以考虑或者当前的引用次数已经不足以使。为数组的最后一个元素的索引,即最大引用次数的索引。,它代表了H指数,即最大的。原创 2023-11-07 16:31:31 · 103 阅读 · 0 评论 -
[Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读
算法的思路是从第二天(索引1)开始遍历价格数组,对于每一天,如果当天的股票价格比前一天的价格高,就计算这两天之间的利润,并将利润累加到。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。- 检查当天的价格是否高于前一天的价格,如果是,表示可以卖出获得利润。原创 2023-11-06 19:24:37 · 66 阅读 · 1 评论 -
[Java·算法·简单] LeetCode 9. 回文数 详细解读
这是一个有效的方法来判断一个整数是否是回文数,因为它不需要将整数转换为字符串进行比较。解释:从左向右读, 为 -121。从右向左读, 为 121-。因此它不是一个回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。如果是负数,它不可能是回文数,因此直接返回。解释:从右向左读, 为 01。因此它不是一个回文数。大于等于零,那么代码继续执行。,以便下一次循环可以处理下一位数字。大于零,就一直进行下面的操作。的各个数字从右到左排列而成。这两个变量将用于进行比较。是一个回文整数,返回。原创 2023-11-06 16:51:16 · 77 阅读 · 1 评论 -
[Java·算法·中等] LeetCode 45. 跳跃游戏 II 详细解读
这个算法具有线性时间复杂度 O(n),其中 n 是数组的长度,因为只需一次遍历数组。,分别表示当前跳跃范围的结束位置和在这个范围内可达的最远位置。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。换句话说,如果你在 nums[i] 处,你可以跳转到任意。你可以使用贪心算法来找到到达数组的最后一个元素的最小跳跃次数。输入: nums = [2,3,1,1,4]解释: 跳到最后一个位置的最小跳跃数是 2。就表示到达数组最后一个元素的最小跳跃次数。,表示下一次跳跃的范围。原创 2023-11-05 15:22:36 · 102 阅读 · 1 评论 -
[Java·算法·简单] LeetCode121. 买股票的最佳时机 详细解读
这个算法通过不断更新最低的购买价格和最大的利润来找到最佳的买入和卖出时机,具有高效性能,因为它只需要一次遍历数组,时间复杂度是O(n),其中 n 是股价数组的长度。原创 2023-11-05 10:39:24 · 67 阅读 · 1 评论 -
摩尔投票的原理详解
它的核心思想是通过消除不同的元素对来找到主要元素,这个算法的时间复杂度为 O(n),其中 n 是数组的长度。这个算法的核心思想在于消除不同元素对,最终剩下的元素就是主要元素,因为主要元素的出现次数超过一半。,解决的问题是如何在任意多的候选人中,选出票数超过一半的那个人。摩尔投票算法适用于大多数寻找主要元素的问题,例如,查找出现次数超过一半的元素,查找众数等。这就是摩尔投票算法的工作原理,通过不断消除不同的元素对,最终找到了主要元素。变量中存储的元素就是数组中的主要元素。可以是任何数组中的元素,而。原创 2023-11-04 10:25:55 · 95 阅读 · 2 评论 -
189. 轮转数组 leetcode
这段代码具有高效性能,因为它只需要遍历数组一次,并且不需要额外的数组空间。它的时间复杂度是O(n),其中n是数组的长度,空间复杂度是O(1)。这是一种经典的旋转数组的解决方法。处理k大于数组长度的情况,通过对k取模运算,确保k在[0, n-1]的范围内,以避免不必要的旋转操作。因为如果k等于n或者k的倍数等于n,数组的旋转操作不会改变它的顺序。,用于反转数组中指定范围的元素。这个方法采用双指针的方式,交换头尾元素,然后逐渐向中间移动,直到完成反转。通过这些操作,数组中的元素就会被右旋转k个位置。原创 2023-11-05 09:52:43 · 64 阅读 · 1 评论 -
算法题 合并两个有序数组
谁小谁的数组坐标下的数,用cur记录后,放入sorted数组,这个数组的指针++,如次以此比较,直到两个数组比较完成。我们为两个数组分别设置一个。的指针,从两数组坐标0,开始。来作为队列的头部指针,原创 2023-10-31 14:56:09 · 46 阅读 · 2 评论 -
LeetCode热题 首题 两数之和
哈希表方法:通过利用哈希表存储,我们通过哈希表,查找表中是否有target-nums[i]这个数据,,运用数组两数之和相加,直到两数之和相加成目标值为止。但时间复杂度为O(1)哈希表方法将时间复杂度降低到从 O(N) 降低到 O(1)原创 2023-10-31 10:23:46 · 71 阅读 · 1 评论 -
27. 移除元素 Leetcode经典面试题
这是一种高效的方式,因为它只需要一次遍历数组,时间复杂度为 O(n),其中 n 是数组的长度。的元素逐个复制到新数组的开头,同时保持新数组的长度,以达到删除所有等于。这个算法的核心思想是通过遍历数组一次,将不等于。的值,这个值表示新数组中的不包含等于。为 2,使用这个算法后,新数组会变成。这个算法是用来从一个整数数组。的元素,并返回新数组的长度。中移除所有值等于给定整数。为 4,表示新数组的长度。用于跟踪新数组中的位置。继续遍历整个数组,直到。举个例子,如果原始数组。时间复杂度为O(n)原创 2023-11-02 09:30:35 · 55 阅读 · 2 评论 -
26. 删除有序数组中的重复项 Leetcode经典面试题
这个算法通过只遍历一次数组,将不重复的元素逐个复制到新数组的开头,并保持新数组的长度,实现了从已排序数组中去除重复元素的目的。这是一种高效的方式,因为它只需要一次遍历数组,时间复杂度为 O(n),其中 n 是数组的长度。用于标记新数组的长度,初始值为0,而。是新数组的最后一个元素的索引,再加1。的值,这个值表示新数组的长度,其中。,使用这个算法后,新数组会变成。为 5,表示新数组的长度。这个也是使用双指针的方式。继续遍历整个数组,直到。举个例子,如果原始数组。原创 2023-11-02 10:01:17 · 50 阅读 · 1 评论