LeetCode
FromNowOnUntilTheEnd
每日记录
展开
-
LeetCode:四数相加(四个数组)、四数之和(一个数组)
public class Solution_454 { /** * 四数相加: * 给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。 * 为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所...原创 2019-06-28 14:46:55 · 1280 阅读 · 0 评论 -
LettCode(20):有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路想象一下,你正在为你的大学课设编写一个小型编译器,编译器的任务之一(或称子任务)将检测括号是否匹配。我们本文中看到的算法可用于处理编译器正在编译的程序中的所有括号,...转载 2019-08-16 11:05:49 · 201 阅读 · 0 评论 -
LettCode(19):删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。方法一:两次遍历算法思路我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)(L−n+1) 个结点,其中 LL 是列表的长度。只要我们找到列表的长度 LL,这个问题就很容易解决。算法首先我们将添加一个哑结点作为辅助,该结点位于列表头部。哑结点用来简化某些极端情况,例如列表...转载 2019-08-16 10:55:28 · 149 阅读 · 0 评论 -
LettCode(17):电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。方法:回溯回溯是一种通过穷举所有可能情况来找到所有解的算法。如果一个候选解最后被发现并不是可行解,回溯算法会舍弃它,并在前面的一些步骤做出一些修改,并重新尝试找到可行解。给出如下回溯函数 backtrack(combination, next_dig...转载 2019-08-16 09:20:43 · 221 阅读 · 0 评论 -
LeetCode(15): 三数之和
给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。思路1、首先对数组进行排序2、排序后固定一个数 nums[i],再使用左右指针指向nums[i]后面的两端,数字分别为nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集3、如...转载 2019-08-09 16:33:09 · 151 阅读 · 0 评论 -
LettCode(11):盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。方法一:暴力法算法在这种情况下,我们将简单地考虑每对可能出现的线段组合并找出这些情...转载 2019-08-09 16:04:06 · 144 阅读 · 0 评论 -
LeetCode(10):正则表达式匹配
给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。方法 1:回溯想法如果没有星号(正则表达式中的 * ),问题会很简单——我们只需要从左到右检查匹配串 s 是否能匹配模式串 p 的每一个字符。当模式串中有星号时,我们需要检查匹配串 s 中的不同后缀,以判断它们是否能匹配模式串剩余的部分。一个直观的解法就是用回溯的方法来体现这种关系。...转载 2019-08-09 15:54:56 · 164 阅读 · 0 评论 -
LeetCode(5): 最长回文子串
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。解法 1: 暴力破解暴力求解,列举所有的子串,判断是否为回文串,保存最长的回文串public boolean isPalindromic(String s) { int len = s.length(); for (int i = 0; i < len ...转载 2019-08-09 15:23:45 · 136 阅读 · 0 评论 -
LeetCode(4): 寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。解法一简单粗暴,先将两个数组合并,两个有序数组的合并也是归并排序中的一部分。然后根据奇数,还是偶数,返回中位数。public double findMedianSorte...转载 2019-08-09 14:20:29 · 436 阅读 · 0 评论 -
LeetCode(3):无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。方法一:暴力法题目更新后由于时间限制,会出现 TLE。思路逐个检查所有的子字符串,看它是否不含有重复的字符。算法假设我们有一个函数 boolean allUnique(String substring) ,如果子字符串中的字符都是唯一的,它会返回 true,否则会返回 false。 我们可以遍历给定字符串...转载 2019-08-09 11:13:15 · 134 阅读 · 0 评论 -
LeetCode(2):两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8...转载 2019-08-09 09:39:26 · 96 阅读 · 0 评论 -
LeetCode(1):两数之和TwoSum
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9。所以返回 [0, 1]方法一:暴力法暴力...转载 2019-08-09 09:10:29 · 119 阅读 · 0 评论 -
LeetCode(21): 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null) { return l2; } if(l2 == null) { ...转载 2019-08-16 14:02:02 · 151 阅读 · 0 评论