leetcode
闻人此生
太阳当空照,花儿对我笑,你叫花儿吗?
展开
-
矩阵快速幂<leetcode笔记>
矩阵快速幂问题描述: 爬楼梯需要n阶可爬到楼顶,每次只能爬1或2阶,问共有多少种爬法。动态规划: 由于每次只能爬1或2阶,故阶数为n的总方案数为最后一步爬1阶(即阶数为n-1阶的总方案数)加上最后一步爬2阶(即阶数为n-2阶的总方案数)。可得,状态转移方程: f(n) = f(n - 1) + f(n -2); <斐波那契数列>边界条件: f(0) = 1,f(1) = 1;对此状态转移方程,可使用递归或迭代法:递归:class Solution{ //超出时间.原创 2021-02-08 13:26:21 · 282 阅读 · 0 评论 -
初识线段树<leetcode笔记>
初识线段树问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。我的思路:枚举数组中所有的连续子数组,找出所有连续子数组和的最大值。缺点:时间复杂度较高o(n^2);class Solution{ public int maxSubArray(int[] nums) { int max = Integer.MIN_VALUE; for(int i = 0;i < nums.length;i+原创 2021-02-06 13:21:12 · 134 阅读 · 0 评论 -
双指针法<leetcode笔记>
双指针法–需要删除元素较少时问题描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。我的思路:设置两个指针,快指针在每次遍历是自增,慢指针只在数组元素不等于val时自增,遍历完成时慢指针的值即为函数的返回值。缺点:若数组中和val相等的元素较少,会导致大量无用的复制,从而降低程序的运行效率原创 2021-02-05 16:52:29 · 74 阅读 · 0 评论 -
合并K个有序链表<Leetcode从简单到困难的递进>
合并K个有序链表<Leetcode从简单到困难的递进>看到合并K个有序链表,我们首先想到的是两个有序链表的合并(后附合并两个有序链表的代码)。算法过程:遍历链表数组,将链表数组中第一个链表和第二个链表进行合并,然后将合并后的结果与链表数组中的第三个链表进行合并,以此类推。 范式:res = helper(res,lists[i]);(注意res初始值应置空)合并k个有序链表的代码实现合并两个有序链表的代码实现...原创 2021-01-31 13:36:28 · 118 阅读 · 0 评论 -
逻辑运算符的“短路”举例
逻辑运算符的“短路”错误代码:错误分析:如果s1是s2的子集或者s2是s1的子集,那么index就会自增到s1.length()或者s2.length()。这样在最后一次判断循环条件时便会出现越界访问现象。正确代码:这段代码仅仅调换了由&&连接的三个条件的顺序,其原理是利用逻辑运算符的“短路”,即便index自增到s1.length()或s2.length(),一旦前边两个条件运算结果为假,就不再进行s1.charAt(index) == s2.charAt(index),.原创 2021-01-30 22:56:47 · 767 阅读 · 0 评论 -
最长公共前缀
**最长公共前缀(Leetcode.14<简单>)**我的思路:首先遍历字符串数组,获取字符串数组中最短字符串的长度min,然后以min作为外循环的边界条件,内循环遍历每个字符串的第i个字符是否全部相等,若不相等标记量flag置为false,否则为true。若flag为true,将该字符加入结果,否则跳出外循环。错点:1.没有考虑数组引用为空和数组长度为0的情况;2.没有考虑flag == false 时应跳出外循环,eg:car cir...原创 2021-01-30 18:48:01 · 78 阅读 · 0 评论