Leetcode题解 java实现
Daniel_2046
这个作者很懒,什么都没留下…
展开
-
[LeetCode] Add Two Numbers
要注意的点是迭代是每次向前的,所以设置一个head表示答案前面的一个node,类似链表的头节点。用一个引用从head开始向后迭代,l1、l2就直接指向下一个就可以,后面也不用了。用一个carry记录有无进位。迭代完成后检查有没有进位,有就多加一个1,最后不要head,返回head的下一个node。class Solution { public ListNode addTwoNumbers(...原创 2018-06-03 22:36:28 · 151 阅读 · 0 评论 -
[LeetCode] Longest Substring Without Repeating Characters
用left、right两个指针(用的是数字,当成指针来理解)在String上移动。每次迭代判定right指向的字符是否存在于HashMap中: 如果不存在,把这个字符加入HashMap,right向右移动一格,尝试更新最大长度max; 如果存在,设前面的串中与当前判定的字符相同的字符c的位置为i,把left一步一步移动到i+1位置,途径的元素从HashMap删掉。class Solut...原创 2018-06-05 16:12:32 · 154 阅读 · 0 评论 -
[LeetCode] Longest Palindromic Substring
回文数分奇偶数长度两种情况: 奇数长度,以中间的字符为轴左右相等,判等从中间字符两侧的字符开始向左右展开。设此时轴为i 偶数长度,以中间两个字母的分界线为轴左右相等,判等从中间两个字符开始向左右展开。设此时轴为(i,i+1)每次迭代以当前的字符 i 和 (i,i+1) 为轴进行判等,并试图更新最长子序列。这里找的是第一个,所以比原有的长才会更新。判定回文数O(n),遍历O(n),总共O...原创 2018-06-06 23:17:49 · 149 阅读 · 0 评论 -
[LeetCode] Container With Most Water
当然可以用O(n^2)的方法暴力求解,但是题目出出来肯定不是让我们暴力求解的。首先想到的是设计一个算法让问题规模不断缩小,这里在求解过程中的变化应该是单向的——比如让底边不断缩短。 我们可以用双指针法,让左右指针向中间移动遍历数组,在这期间每次移动指针底边都缩短1,这时候的问题是,按照什么规则遍历?在这里,每次向内移动的指针只能是较短边的那一个。 证明:容器的储水量V0是较短边...原创 2018-06-13 20:54:59 · 158 阅读 · 0 评论 -
[LeetCode] Two Sum
暴力破解太笨了。用散列表建立“数组元素”与“和目标值的差值”的映射,同时检查hashmap中已有的内容,一旦找到直接输出。import java.util.Arrays;class Solution { public int[] twoSum(int[] nums, int target){ HashMap<Integer,Integer> map = new Ha...原创 2018-06-02 15:56:36 · 137 阅读 · 0 评论 -
[LeetCode] Remove Nth Node From End of List
目录问题分析代码问题 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n 保证是有效的。进阶: 你能尝试使用一趟扫描实现...原创 2018-07-22 12:08:12 · 179 阅读 · 0 评论 -
[LeetCode] Generate Parentheses
目录 问题分析代码问题给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]分析关于括号的问题最简单的方法就是用一个辅助栈,使用辅助栈,实际上得到的信息是什么?...原创 2018-07-22 12:28:06 · 250 阅读 · 0 评论