LeetCode
wisdom_jie
这个作者很懒,什么都没留下…
展开
-
【LeetCode66】加一(C++)
对于最高位进位的情况,因为在数组中最高位在digits[0],无法再在其前面添加数字,所以此处我们重新定义一个vector数组,长度比原数组大1,并将最高位置为1即可。在数组中即在该数字的前一个数字上加一,如循环中i--,然后继续判断此时的加一是可以直接加还是需要再进位。类似于高精度加低精度运算,然而这里只需加一更简单一些,因此,我们并不需像高精度加法一样把数字先翻过来,而是直接在原数上进行运算。对于需要进位的情况:又会分出两种情况,一种是正常进位,一种是最高位需要进位。原创 2024-05-14 16:39:52 · 213 阅读 · 0 评论 -
【LeetCode994】腐烂的橘子(C++)
采用广搜的方法,每次从烂橘子队列的队头提取烂橘子坐标,然后分别看它的上下左右四个方向是否为好橘子,如果是则将其传染为烂橘子,并添加到烂橘子队列的队尾,同时其腐烂时间为队头橘子腐烂时间的下一分钟。首先对网格进行预处理,分别将好橘子和烂橘子的坐标记录到两个队列que中,此处用数组模拟队列,在记录是还使用到了一个小技巧,如果同时记录行列信息需要两个变量,根据数据范围行列都小于等于10,所以我们将行列拼成一个四位数,例如3行5列记录为0305=3*100+5,10行1列记为1001=10*100+1。原创 2024-05-13 11:13:17 · 277 阅读 · 0 评论 -
【LeetCode20】有效的括号(C++)
当遇到右括号时,判断其与栈顶元素是否能匹配,如果匹配,则弹出栈顶,即把匹配的左括号弹出,如果不匹配则先入栈。题目大意为,给一个由()[]{},六种字符组成的字符串,要求判定其中的括号是否相匹配。例如,字符串( [ ) ] ,虽然每个左括号都有相应的右括号,然而因为顺序,所以该字符串也不是有效的。在遇到右括号时,其实如果不与栈顶括号匹配可以直接return false结束,因为右括号进栈后并没有出栈条件,右括号永远都不会出栈。下图以( [ ] { [ ] } )为例,展示了进栈出栈过程。原创 2024-05-12 12:00:00 · 624 阅读 · 1 评论 -
【LeetCode2960】统计已测试设备(C++)
只要读懂题目意思,按要求来完成就好。用ans记录遍历过程中大于零数字的个数,同时ans也代表着后面的数字要被减几次。例如,在遍历到当前位置是ans为3,那么说明在这个数之前有3个大于零的数,那么当前数字应该被减3次,所以我们看当前数字减ans的值是否大于0来判断。题目描述讲得很复杂,实际上是给定一个数列,从前向后遍历,只要当前数字大于零,就会让其后的所有数字都减1,统计遍历过程中有多少数大于零。原创 2024-05-11 12:00:00 · 252 阅读 · 1 评论 -
【LeetCode42】接雨水(C++)
经过思考后可以发现每个位置能接到的雨水量取决于该位置左侧的最大高度left,该位置右侧的最大高度right以及当前位置的高度height,其实是left和right中的较小值减去当前位置的高度,即min(left,right)-height。在代码中,我们通过一遍从前向后和一遍从后向前的循环在left[i]中记录位置i左侧最大高度,right[i]中记录位置i右侧最大高度,最后通过公示min(left[i],right[i])-height[i]计算每个位置的存水量。原创 2024-05-10 12:00:00 · 331 阅读 · 1 评论 -
【LeetCode88】合并两个有序数组(C++)
一道归并排序,定义两个指针one和two,初始时分别指向两个数列的头部,每次比较两数列中指针位置的数字,将较小的数字放入排列好的队伍a中,然后将指向较小数字的指针向后推一位。以此重复比较,直到一个数组的中的所有数字被比完,即while循环条件不再成立。最后将没有比较完的那列数字并在a后,a即为合并后的数列。更快的方法:对两个数列从后向前比较,这样比较完的数字可以直接放在nums1中应该在的位置,因为已知了合并后数列长度为m+n,可以省去定义数组a和再用数组a覆盖nums1。原创 2024-05-09 12:00:00 · 366 阅读 · 0 评论 -
【LeetCode283】移动零(C++)
本方法对数列从前向后进行遍历,用n记录当前已有几个非零元素。注意:第n个非零元素,在处理后的数列中应该排在第n位,所以将其放在nums[n]的位置(注意数组下标从0开始),原位置本该置为0,但是需要注意,如果数字本身就排在它应该在的位置,则不能将该位置清零。例如对于数列[1,2,3],当i=0时,此时n为0,并且该位置num[i]不为0,但是我们实际并没有将该位置的数挪动,所以不能将原位置置为0,否则数列中会有元素丢失。题目大意是给定一个数列,对数列重新排列,将0元素放在数列末尾,其他元素顺序不变。原创 2024-05-08 12:00:00 · 469 阅读 · 0 评论 -
【LeetCode26】删除有序数组中的重复项(C++)
因为是非递减数列,所以如果出现重复的数字则必然是相邻的,同时这里的k就是数列中有多少不相同的数字的个数。那么我们从数列第二项依次和自己的前一项进行比较,如果和前一项数字不相等,那么我们找到了一个不同的数字,让k++,并且将这个数字放入新的数组a的最后,方便最后输出去重后的数列;值得注意的是,在从前向后遍历时,我们是从第二个数开始每个数字和前一个数字比较,那么对于数列中的第一个数,我们默认其为数列中的一个新数,所以在初始化阶段,我们将k初始为1,并且将数列第一个数直接放入数组a中。原创 2024-05-07 21:19:57 · 661 阅读 · 0 评论