随笔分类 - leetcode题目
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】题目要求的是所有字符串的最长公共前缀,那么对应的这个公共前缀必然不可能大于最短的字符串。所以要遍历的字符个数也就被限制了(不会出现数组越界的情况)。其次只有全部字符串都匹配某个字符才会被纳入到前缀里面,如果一旦出现不匹配的情况,那么后面的就不需要遍历了。 代码展示: //时间0
阅读全文
摘要:题目: 思路: 【1】由于矩阵大小固定,而且数值也是固定的范围,采用int数组,以下标来替代值,以值来表示个数,就可以清晰的知道该行,该列,或者该小矩阵是否出现过重复的数值,如 rows[2][3] = 2 , 则表示第二列中数值3出现了两次,基于每一列或者每一行中1-9都只会出现一次的条件就可以判
阅读全文
摘要:题目: 思路: 【1】既然找的是最后一个单词,那么正常的话肯定是反向遍历了会比较快(但是特殊情况,如把很多空格塞在最后的情况,这种情况如果太多了其实效率反倒是不如正向遍历),但是反向遍历的话肯定需要先排除不需要的字符,然后计算完第一个单词后就停下来,这种在正常情况下无疑是最优的。 代码展示: //时
阅读全文
摘要:题目: 思路: 【1】首先很重要的一点便是最后一个字符转成值必然是要加的,其次如果某个字符比下一个字符的值要小就是需要减的。 代码展示: //时间4 ms 击败 58.62% //内存42.3 MB 击败 49.45% class Solution { public int romanToInt(S
阅读全文
摘要:题目: 思路: 【1】多次遍历 主要是将规则进行拆分,分为 1)左规则:当 ratings[i−1]<ratings[i] 时,i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。 2)右规则:当 ratings[i]>ratings[i+1] 时,i 号学生的糖果数量将比 i+1 号孩子的糖果数
阅读全文
摘要:题目: 思路: 【1】常规的方式(但是容易出现超时的现象) 【2】通过累计总油量-耗油量的方式判断 代码展示: 常规的方式: //时间复杂度:O(N^2),其中 N 为数组的长度。我们对数组进行了二次遍历。 //空间复杂度:O(1)。 //这种存在大量的重复遍历,而且一旦数据量庞大的话会导致耗费时间
阅读全文
摘要:题目: 思路: 【1】274. H 指数 【1.1】明确题目 该题目,主要是理解题意即可 条件:需要同时满足文章数>=h,且每篇文章的引用数>=h 如[3,0,6,1,5] 排序后为 [0,1,3,5,6] 可以发现引用数大于等于1的有4篇 可以发现引用数大于等于3的有3篇 可以发现引用数大于等于5
阅读全文
摘要:题目: 思路: 【1】如果采用辅助空间(这种是最简单的,因为需要遍历一遍,然后放入指定位置) 【2】对于进阶的处理,即只用空间复杂度为O(1) 【2.1】利用环的思维 其实这里需要理解一个比较绕的逻辑 就是从X位置开始循环,到回到X位置到底遍历了多少个元素 已知数组的元素个数是n,偏移量为k (这个
阅读全文
摘要:题目: 思路: 【1】26. 删除有序数组中的重复项的思路(双指针) 首先明确数组第一位是不会变动的,因为前面没有可以比较的元素 所以记录它的下标left可以作为比对元素的下标 其次当遍历整个数组的时候如果出现某个元素的数值与对比元素不同时 理应将该元素放置于比对元素的后面(即left+1的地方)
阅读全文
摘要:题目: 思路: 【1】121. 买卖股票的最佳时机的思路 【1.1】双指针的方式 本质上求得是右边某值减去左边某值的最大值是多少 所以双指针处理 输入示例:[7,1,5,3,6,4] 左指针left,右指针right一开始都是指向下标为0的数值 右指针right不断向右走 如当right = 1的时
阅读全文
摘要:题目: 思路: 【1】双指针的做法(这题类似于 11. 盛最多水的容器): 【2】动态规划(可以理解为双指针的基础版) 如图: 【3】 代码展示: 双指针的做法: //时间0 ms 击败 100% //内存43.7 MB 击败 6.18% //时间复杂度:O(n),其中 n 是数组 height 的
阅读全文
摘要:题目: 思路: 【1】采用快排中对元素进行互换的方式(双指针做法): 首先是要明确题目说什么 1.返回的是 数组长度 其次会根据数组长度输出对应的元素值 即数组为[3,2,2,3] 返回1,输出的是[3] 返回2,输出的是[3,2] 返回3,输出的是[3,2,2] 所以必须要对原本数组里面的不符合的
阅读全文
摘要:题目: 思路: 【1】无 代码展示: //时间10 ms 击败 75.48% //内存42.9 MB 击败 44.49% class Solution { public int calculate(String s) { Deque<Integer> ops = new LinkedList<Int
阅读全文
摘要:题目: 思路: 【1】无 代码展示: //时间1 ms 击败 97.94% //内存39.8 MB 击败 23.45% class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>()
阅读全文