jly0612
码龄12年
关注
提问 私信
  • 博客:72,892
    社区:227
    问答:1,445
    74,564
    总访问量
  • 68
    原创
  • 700,700
    排名
  • 16
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2012-08-16
博客简介:

jly0612的博客

查看详细资料
个人成就
  • 获得32次点赞
  • 内容获得1次评论
  • 获得25次收藏
创作历程
  • 68篇
    2016年
成就勋章
TA的专栏
  • 《Android开发艺术探索》读书笔记
    10篇
  • 安卓源码分析
    7篇
  • linux学习之路
    7篇
  • CS基础技能
    7篇
  • leetcode
    37篇
创作活动更多

仓颉编程语言体验有奖征文

仓颉编程语言官网已上线,提供版本下载、在线运行、文档体验等功能。为鼓励更多开发者探索仓颉编程语言,现诚邀各位开发者通过官网在线体验/下载使用,参与仓颉体验有奖征文活动。

368人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

leetcode 148. Sort List 解题报告

原题链接原题链接解题思路总体的思路是基于归并排序。 首先用快慢指针将链表分为两个部分,递归将两个部分进行归并排序。 归并排序主要和数组排序差不多,因为链表有指针相连,所以不用开辟另外的数据结构去存储(数组需要开辟一个数组去存储排序后的顺序)解题代码/** * Definition for singly-linked list. * public class ListNode { *
原创
发布博客 2016.09.17 ·
490 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 91. Decode Ways 解题报告

原题链接原题链接解题思路动态规划,建立数组dp。注意点:0的特殊性(0不能往下组合数字,不能连续出现两个0或者以0为开头)。 状态转移方程:如果不能和前面的数字组成合法数字dp[i] = dp[i - 1];如果可以则dp[i] = dp[i] + dp[i - 2];解题代码public class Solution { public int numDecodings(String s)
原创
发布博客 2016.09.17 ·
574 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 2. Add Two Numbers

原题链接原题链接解题思路单列表题。只要任一列表节点不为空,还有进位数字不为0就一直循环执行。维护好进位就行了。不难。解题代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x
原创
发布博客 2016.09.08 ·
475 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 236. Lowest Common Ancestor of a Binary Tree 解题报告

原题链接原题链接解题思路第一遍代码超时了。思路(递归左子树,右子树,找到左右子树是否含有目标的TreeNode)这里有个坑,刚开始我是对比TreeNode.val是否相等判断是否含有,后来发现测试案例有很多相等的val,才知道应该判断此treenode是否相等。 修改后的代码如下(AC),思路是一样的实现比第一遍简洁多了,也是递归。如果当前根和其中任一匹配,直接返回当前根,必然是当前根。 如果递
原创
发布博客 2016.09.07 ·
749 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 40. Combination Sum II 解题报告

原题链接原题链接解题思路回溯剪枝。注意点就是两个相同的list处理。方法是先排序,这样相同的数字就紧挨着,当数字等于上一个数字时,表明上个同样的数字已经处理过,这个没必要再处理,continue就可以了。 其他的就看代码吧。解题代码public class Solution { public List<List<Integer>> combinationSum2(int[] candida
原创
发布博客 2016.09.06 ·
594 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 118. Pascal's Triangle 解题报告

原题链接原题链接解题思路简单题,注意边界比如numRows==0时就可以了,主要是根据前面的List元素推断当前的List元素。解题代码public class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> res = new ArrayList<List<I
原创
发布博客 2016.09.06 ·
334 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 310. Minimum Height Trees 解题报告

原题链接原题链接解题思路常规方法可以使用BFS或者DFS,对每个点都遍历一遍,求出所有点组成的树的高度,然后找出哪些高度最小的节点,可以通过不断更新最低高度来进行剪枝。但是时间复杂度过高。 最终的解题思路采用了不断删除叶子节点,逐渐逼近根节点的方法,在删除叶子节点的同时,会有一些新的节点成为叶子节点,于是继续循环删除,直至不能删除为止,那么剩下的节点就是高度最小的根。 首先将图存储起来,并将每个
原创
发布博客 2016.09.04 ·
1190 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 268. Missing Number 解题报告

原题链接原题链接解题思路题目要求时间复杂度n,空间复杂度1。所以不能用排序或者数组记录。 a^b^b = a;由题意肯定有缺的数字,那最后一个数字就是n,此可得当所有数和下标进行异或运算,然后再最后异或n就得到缺的数字。解题代码public class Solution { public int missingNumber(int[] nums) { int xor = 0
原创
发布博客 2016.09.04 ·
382 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 387. First Unique Character in a String 解题报告

原题链接原题链接解题思路简单题,只有小写字母。第一直觉开个数组记录。解题代码public class Solution { public int firstUniqChar(String s) { int[] cnt = new int[27]; int res = -1; char[] ss = s.toCharArray();
原创
发布博客 2016.09.04 ·
341 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 309. Best Time to Buy and Sell Stock with Cooldown 解题报告

原题链接原题链接解题思路第一感觉就是动态规划,但是还是难以将抽象的题目具体化,如何根据前面的状态推断现在这个状态(状态转移方程)。 根据题意可以明了,总共有三个状态,持有股票,卖掉股票,休息一天,后两种都可以归纳为未持有股票。状态有了,如何推断? 再往下分析,未持有股票的状态,最大利润有两种可能。一,和昨天一样保持未持有;二,昨天持有股票今天卖掉。sdp[i] = Math.max(sdp[i-
原创
发布博客 2016.09.03 ·
1432 阅读 ·
3 点赞 ·
0 评论 ·
2 收藏

leetcode 300. Longest Increasing Subsequence 解题报告

原题链接原题链接解题思路最开始的思路是维护一个最大值,复杂度是n^2。后来看题目要求可以做到n*lgn,提示二分。 首先建立一个数组dp,维护最长递增数组。遍历每个数字,二分查找dp数组获得该插入的地方。最后维护dp数组长度len即最后答案。解题代码public class Solution { public int lengthOfLIS(int[] nums) { in
原创
发布博客 2016.09.03 ·
338 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 383. Ransom Note 解题报告

原题链接原题链接解题思路刚开始想用hashmap去存储,后来仔细审题发现只有小写字母,那就开个数组就能存储,简单方便。解题代码public class Solution { public boolean canConstruct(String ransomNote, String magazine) { char[] rs = ransomNote.toCharArray()
原创
发布博客 2016.09.03 ·
400 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 386. Lexicographical Numbers 解题报告

原题链接原题链接解题思路用函数栈(递归)用来去完成字典序排序。解题代码public class Solution { public List<Integer> lexicalOrder(int n) { List<Integer> res = new ArrayList<>(); for (int i = 1;i < 10 ;i++ ) {
原创
发布博客 2016.09.02 ·
988 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 389. Find the Difference 解题报告

原题链接原题链接解题思路简单题。直接用hashmap去记录第一个字符串的字母及频率,再遍历第二个字符串找出答案。解题代码public class Solution { public char findTheDifference(String s, String t) { char[] ss = s.toCharArray(); char[] tt = t.to
原创
发布博客 2016.09.02 ·
679 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 329. Longest Increasing Path in a Matrix 解题报告

原题链接原题链接解题思路刚开始想到了暴力遍历每一个数从头开始深度搜索。后面看了提示发现可以使用数组dp。 dp[i][j]表示以i行j列的数字为开头的最大长度。这样就可以把每个数字都记录下来(以空间换时间)。以免大量的重复。 总体思想就是dfs+dp。解题代码public class Solution { private int m; private int n; pri
原创
发布博客 2016.08.06 ·
448 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 322. Coin Change 解题报告

原题链接原题链接解题思路题目很熟悉,和以前做过的一道很类似,于是想都没想就知道肯定是动态规划。 建立一个dp数组。dp[i]表示当凑齐i时最少要多少个数字组成。状态转移方程dp[i] = Math.min(dp[i-k] + 1,dp[i]); 解释一下吧,dp[i-k]只要不等于Integer.MAX_VALUE,证明凑齐i-k,有解。并且前面已经算出来了,这时候再加上k的1位数字就行。为了保
原创
发布博客 2016.08.05 ·
1266 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 328. Odd Even Linked List 解题报告

原题链接原题链接解题思路第一次题目没看清楚,以为是按值的奇偶来判断,然后导致只过了部分测试案例,后面仔细审题发现是按照位置的奇偶判断。 代码实现不是很难,为了警示自己审题,我还是两个代码都贴出来吧。解题代码(正解)public class Solution {public ListNode oddEvenList(ListNode head) { if (head != null) {
原创
发布博客 2016.08.05 ·
329 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 331. Verify Preorder Serialization of a Binary Tree 解题报告

原题链接原题链接解题思路这道题参考了讨论区,连续遇到两个“#”,说明这是叶子节点,删去他们及他们的根节点,用一个’#‘代替,直到最后剩一个’#‘说明是二叉树。否则,返回false。 然后我就使用Stack来完成。 当遇到数字直接压入。遇到#,判断此堆中top是否为#,是就表明即将有两个#,为叶子节点,就连续pop两个(一个#,一个数字),再将此#压入(用一个#代替两个#和一个数字)。 直到最后
原创
发布博客 2016.08.05 ·
379 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 378. Kth Smallest Element in a Sorted Matrix 解题报告

原题链接原题链接解题思路这道题用BFS+优先级队列(堆)。其实这道题和我前面写的一道题解题方法一模一样。题号是373。这里就不细讲了。解题代码public class Solution { public int kthSmallest(int[][] matrix, int k) { PriorityQueue<Num> q = new PriorityQueue<>()
原创
发布博客 2016.08.04 ·
441 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

leetcode 377. Combination Sum IV 解题报告

原题链接原题链接解题思路刚看到题目的我是一脸懵逼的。看题目的标签是动态规划,可见自己的动态规划很弱,需要加强。 首先构造数组dp[i]用来表示target等于i时有多少种类。并且定义dp[0] = 1。 状态转移方程是dp[i] = sum(dp[i - nums[k]]) (k<=i);为什么将dp[0] = 1,就很明显了,因为当一个数字和target相等,此数字只有一种排列。 这样直到求
原创
发布博客 2016.08.04 ·
927 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多