01 2024 档案
摘要:leetcode 22.括号生成 第二十二题:括号生成 1.回溯: public List<String> generateParenthesis(int n) { List<String> ans = new ArrayList<String>(); backtrack(ans, new Stri
阅读全文
摘要:leetcode 17.电话号码的字母组合 第十七题:电话号码的字母组合 1.回溯: 首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作。 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。每次取电话号码的一位
阅读全文
摘要:leetcode 21.合并两个有序链表 第二十一题:合并两个有序链表 1.迭代: 当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。 public ListNode merg
阅读全文
摘要:leetcode 20.有效的括号 第二十题:有效的括号 1.栈: 判断括号的有效性可以使用「栈」这一数据结构来解决。 我们遍历给定的字符串 s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。 当我们遇
阅读全文
摘要:leetcode 19.删除链表的倒数第N个节点 第十九题:删除链表的倒数第N个节点 在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的 next指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。 例如,在本题中,如果我们要删除节点 y,我们需要知道
阅读全文
摘要:leetcode 15.三数之和 第十五题:三数之和 1.排序 + 双指针: 和两数之和不同,但可以转化为类似的思路,即确定一个数,去找数组中是否有另外两个数之和等于它的相反数。本题的难点在于如何去除重复解,如果是无序数组,则需要对每个值所在的位置进行记录并进行比较。但如果是有序数组且相加结果为0,
阅读全文
摘要:leetcode 11.盛最多水的容器 第十一题:盛最多水的容器 1.暴力枚举: 会超时,但是做一些条件判断应该可以擦边过 public int maxArea(int[] height) { int max_result = 0; for (int i = 0;i<height.length-1;
阅读全文
摘要:leetcode 5.最长回文子串 第五题:最长回文子串 1.中心拓展: 我们枚举所有的「回文中心」并尝试「扩展」,直到无法扩展为止,此时的回文串长度即为此「回文中心」下的最长回文串长度。我们对所有的长度求出最大值,即可得到最终的答案。拓展分为两种情况,奇数长度和偶数长度,分别拓展一次取较大值,同时
阅读全文
摘要:leetcode 4. 寻找两个正序数组的中位数 第四题:寻找两个正序数组的中位数 1.合并数组,排序,找中位数 暴力解法,时间复杂度(M+N),空间复杂度(M+N) public double findMedianSortedArrays(int[] nums1, int[] nums2) {
阅读全文
摘要:leetcode 第三题:无重复字符的最长子串 自己写的: 第一想法:滑动窗口,用两个指针指向窗口的左右边界,用一个HashSet存储窗口内已有的值。另写一个find_first_temp方法用于出现重复字符时寻找新的左边界,左边界更新时也要更新set,将新左边界之前的元素删掉。 public in
阅读全文
浙公网安备 33010602011771号