LeetCodeTOP100刷题遇到的问题
Juliussss
这个作者很懒,什么都没留下…
展开
-
LeetCode141题Linked List Cycle
本题思路是定义两个指针,快指针和慢指针。快指针一次跳两个节点,慢指针一次跳一个节点。如果有环那么两个指针会相遇,如果无环那么快指针会提前指向null,所以可以做一个while循环,条件是快慢指针的下一个节点不为空,这里有一个问题需要注意,如果一个指针的下一个节点为空那么p.next.next放在while循环中会抛出指向为空的错误,所以需要在while中再加一个if判断。/** * De...原创 2019-05-02 18:08:31 · 199 阅读 · 0 评论 -
Leetcode 48. Rotate Image
先求出翻转矩阵,然后将矩阵左右对称翻转即可class Solution { public void rotate(int[][] matrix) { int n=matrix.length; for(int i=0;i<n;i++){ for(int j=i;j<n;j++){ in...原创 2019-05-26 22:58:25 · 69 阅读 · 0 评论 -
LeetCode49. Group Anagrams
定义一个HashMap,键为排序好的字符串,值为list存放所有包含相同字符的字符串class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs.length==0){ return new ArrayList<&...原创 2019-05-26 23:38:56 · 79 阅读 · 0 评论 -
LeetCode 55. Jump Game
看能不能跳跃到最后,主要是看能不能跳过0,只要跳过了0就可以往下跳。class Solution { public boolean canJump(int[] nums) { if(nums.length<=1) return true; //如果数组长度小于等于1,不用跳直接就能到最后的位置 for(int i=...原创 2019-05-27 14:19:12 · 76 阅读 · 0 评论 -
LeetCode 56. Merge Intervals
先将二维数组根据每个一维数组的第一个元素排序,然后遍历,如果是[0,2]和[3,4]这种情况,就直接添加,如果是[0,2],[2,4]这种情况就将0作为第一个元素,4作为第二个元素放入。class Solution { public int[][] merge(int[][] intervals) { List<List<Integer>>l...原创 2019-05-27 16:42:10 · 80 阅读 · 0 评论 -
LeetCode 62. Unique Paths
本题的数学思路是,m次向右,n次向下,相当于m+n个空位中,选n个空位放置向下的操作。class Solution { public int uniquePaths(int m, int n) { m--; n--; int minn=Math.min(m,n); int maxx=Math.max(m,n); ...原创 2019-05-27 20:27:07 · 74 阅读 · 0 评论 -
LeetCode 64. Minimum Path Sum
动态规划,第一行和第一列的值都改为加前一个数的和,剩下的数加上min(左边的数,上面的数)。最后右下角的值为最短路径的值。class Solution { public int minPathSum(int[][] grid) { int m=grid.length; int n=grid[0].length; for(int i=0;...原创 2019-05-27 21:29:56 · 72 阅读 · 0 评论 -
LeetCode 75. Sort Colors
新建一个大小为三的数组,分别记录0,1,2出现的次数。然后重置nums数组即可class Solution { public void sortColors(int[] nums) { int len=nums.length; int[] count={0,0,0}; for(int i=0;i<len;i++){ ...原创 2019-05-27 22:43:17 · 74 阅读 · 0 评论 -
LeetCode 78. Subsets
使用递归,核心是temp添加一个元素,递归调用自身然后去除元素class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> lst=new ArrayList<>(); Arrays....原创 2019-05-27 23:05:03 · 70 阅读 · 0 评论 -
LeetCode46. Permutations
暂且标记,回头看class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> lst=new ArrayList<>(); // Arrays.sort(nums); ...原创 2019-05-26 22:21:46 · 104 阅读 · 0 评论 -
LeetCode34. Find First and Last Position of Element in Sorted Array
用二分查找的思想先找到数组中第一个等于target的数,如果没找到直接返回{-1,-1},如果找到了,left就确定了,然后在找最右边的数,记为right,得出答案。class Solution { public int[] searchRange(int[] nums, int target) { int[] res={-1,-1}; res[0]=...原创 2019-05-26 21:11:51 · 90 阅读 · 0 评论 -
LeetCode155. Min Stack
实现思想就是实现两个栈,一个栈存放所有元素,一个栈只有输入的x小于等于当前栈顶元素的时候才会push。注意:对比Integer数据类型的元素的时候,一定要用equals而不是==,原因是==是用来比较对象的引用地址而不是比较Integer的值,所以要把Integer当作对象来看待。class MinStack { /** initialize your data structu...原创 2019-05-02 19:41:07 · 52 阅读 · 0 评论 -
LeetCode169. Majority Element
本题用了两种思路思路一:将数组进行排序,由于某个数出现次数超过了数组大小的一半,那么nums[nums.length/2]必然是这个数思路二:使用HashMap,key为数组中的数字,value为数字出现的次数。记录完之后遍历HashMap,当遇到value大于nums.length/2的时候,返回key值代码如下注释掉的部分为思路二的代码,未被注释的是思路一的代码:class ...原创 2019-05-03 18:39:52 · 66 阅读 · 0 评论 -
LeetCode198. House Robber
思路是动态规划,如果只有0家或者1家,那么作为特殊情况处理。在多家的情况下,依次遍历,每遇到一家店只有抢和不抢两种情况,用一个大小为2的数组dp[]存放打劫结果,分别是dp[0]和dp[1],每次都要分析如果打劫了这家店会不会得到一个最大的金钱,如果不能就取上一个方案。最后在dp[0]和dp[1]中取一个最大的即可。class Solution { public int rob(in...原创 2019-05-03 19:38:42 · 80 阅读 · 0 评论 -
LeetCode206. Reverse Linked List
本题思路是从头往后翻转链表,用了一个临时节点temp作为中转节点和一个pre节点以及curr节点,先让临时节点为当前节点的下一个节点,然后当前节点curr下一个节点指向之前一个节点pre,然后让pre等于curr,curr等于temp。依此顺序往下遍历链表,直到curr为空class Solution { public ListNode reverseList(ListNode he...原创 2019-05-03 20:31:40 · 69 阅读 · 0 评论 -
LeetCode438. Find All Anagrams in a String
首先,判断s和p的长度,如果s长度小于p,那么直接返回。然后将s和p都转为char数组,并定义两个大小为26(a-z一共26种可能)的数组,数组下标为char字符的ASCII码减去‘a'的ASCII码。先遍历一遍p,每个字符出现的次数写入nums_p,然后从下标0开始遍历数组ch_s,每次将长度为lenP的一段字符出现的次数记录到nums_s,更新nums_s的时候,只需要将最前一个字符出现的次...原创 2019-05-04 12:38:51 · 120 阅读 · 0 评论 -
LeetCode437. Path Sum III
将问题简化,每个节点都求一下它作为根节点的情况是否有合适的路径。class Solution { int num=0; public int pathSum(TreeNode root, int sum) { if(null==root) return 0; getway(root,sum); pathS...原创 2019-05-04 17:56:35 · 113 阅读 · 0 评论 -
[LeetCode]39. Combination Sum Faster Than 99.94%
本题的算法是使用递归,定义一个临时list来存储元素。如果满足条件,那么就在结果中添加这个临时list。class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>>...原创 2019-05-08 10:09:59 · 52 阅读 · 0 评论 -
[Leetcode]33. Search in Rotated Sorted Array Faster Than 100%
本题要求算法复杂度为logn,就相当于要求二分法算法及更快的算法,本题思路是每次找中间点mid,每次判断target应该出现在mid的左边还是mid的右边。然后修改查找范围,直到循环结束还未找到值为target的元素的话,则返回-1class Solution { public int search(int[] nums, int target) { int star...原创 2019-05-08 13:48:55 · 70 阅读 · 0 评论 -
LeetCode 96. Unique Binary Search Trees
1、需要考虑每个结点放在最顶端的情况。2、每个结点放在最顶端时,看看左边有多少个结点和右边有多少个结点。3、假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n)G(n)=f(1)+f(2)+f(3)+f(4)+...+f(n)当i为根节点时,其左子树节点个数为i...原创 2019-07-08 15:16:26 · 160 阅读 · 0 评论