![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
花粥没有花
这个作者很懒,什么都没留下…
展开
-
【二分之美】
当看到有序数组,时间复杂度限定为logN时,便想到二分法。一、leetcode4寻找两个有序数组的中位数题目里要求了时间复杂度为logN,如果不做要求可以使用双指针分别指向两个数组的头部,一直移动到length之和的一半。我们不妨用另一种思路,题目是求中位数,其实就是求第 k 小数的一种特殊情况,而求第 k 小数有一种算法。假设我们要找第 7 小的数字。7-7/2=4,4-4/2...原创 2020-03-13 11:48:51 · 120 阅读 · 0 评论 -
理清链表的易混淆概念
1. 两个节点相等/公共节点(pHead1==pHead2)当一个节点相等后,说明这个节点后面的节点都重合了,肯定也是相等的。公共节点,两个链表从某一节点开始,他们的next都指向同一个节点。但由于是单向链表的节点,每个节点只有一个next,因此从第一个公共节点开始,之后他们的所有节点都是重合的,不可能再出现分叉。...原创 2020-03-02 23:02:43 · 105 阅读 · 0 评论 -
【Leetcode股票专题】状态转移
参考大佬的题解对状态的理解这个问题的「状态」有三个,第一个是天数,第二个是允许交易的最大次数,第三个是当前的持有状态(即之前说的 rest 的状态,我们不妨用 1 表示持有,0 表示没有持有)。而且我们可以用自然语言描述出每一个状态的含义,比如说 dp[3][2][1] 的含义就是:今天是第三天,我现在手上持有着股票,至今最多进行 2 次交易。再比如 dp[2][3][0] 的含义:今天是第...原创 2020-02-04 22:41:11 · 136 阅读 · 0 评论 -
【回溯专题】leetcode93/17/39/40/46/47
之前一直对回溯理解不深,今天刷一下leetcode的回溯专题。不得不说,大佬们写的递归回溯代码真的优美,我i了。17题思路树状图:public class code17 { //一个映射表,第二个位置是"abc“,第三个位置是"def"。。。 //这里也可以用map,用数组可以更节省点内存 String[] letter_map = {" ","*","abc",...原创 2020-01-11 21:47:49 · 155 阅读 · 0 评论 -
【leetcode】206/92.链表反转 dfs(深度理解递归)
由浅入深:先看206题(简单)参考大神的解析https://leetcode-cn.com/problems/reverse-linked-list-ii/solution/bu-bu-chai-jie-ru-he-di-gui-di-fan-zhuan-lian-biao/写不出来如此简洁优秀的递归代码,那么就分析一下优美的代码吧! public ListNode reverse...原创 2020-01-07 21:20:52 · 164 阅读 · 0 评论 -
【leetcode】(1)43.字符串相乘
思路:竖式乘法,遍历num1 的所有位,与num2 相乘再相加。补0:num1 除了第一位的其他位与 num2 运算的结果需要补0。预备知识:leetcode415.字符串相加 public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) { ...原创 2019-12-28 17:23:01 · 76 阅读 · 0 评论 -
【leetcode】(1)33.搜索旋转排序数组
思路:半排序数组,进行判断,一共四种情况:数组前半部分有序且目标值在前半数组中数组后半部分有序且目标值在后半数组中数组前半部分有序且目标值在后半数组中数组后半部分有序且目标值在前半数组中前两种直接进行二分查找,后两种进行递归。 public int search(int[] nums, int target) { int start = 0; ...原创 2019-12-28 17:02:39 · 83 阅读 · 0 评论 -
【leetcode80】(0)删除排序数组中的重复项 II
思路:一开始一直在想怎么删除数组中的元素把开销降到最低,后来才看到题目要求“不需考虑超出新长度后的元素”。这样就没必要做数组删除了。 public int removeDuplicates(int[] nums) { if(nums.length<3) return nums.length; int pos = 2; ...原创 2019-12-26 11:10:19 · 112 阅读 · 0 评论 -
【leetcode】79.单词搜索(典型的dfs+回溯)
注意点:题目中要求同一个单元格内的字母不允许被重复使用,实现方法如下:定义一个boolean型的数组,每走到一个位置,该数组就置1,如果下面的路不通出现回溯,再置零完整代码:public class code79 { int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}}; String word; char[][] board;...原创 2019-12-25 10:53:45 · 140 阅读 · 0 评论 -
【leetcode】15.三数之和
思路:数组遍历,双指针首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集如果 nums[i] == nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过当 sum == 0 时,nums[L] == nums[L+1]...原创 2019-12-20 20:24:28 · 63 阅读 · 0 评论 -
【leetcode】6.Z字型变换
思路:有几行就有几个StringBuilder,从上往下再从下往上依次向每一行的SB中addchar。最精彩的地方是flag,用于实现到顶或到底转换方向:完整code: public String convert(String s, int numRows) { if(numRows==1) return s; List&...原创 2019-12-16 21:27:11 · 77 阅读 · 0 评论 -
【leetcode130】典型dfs问题:填充区域
思路:根据“边界上的0不会被填充”,那么也就意味着边界上的0的附近(上下左右四个方向上)的0也不会被填充,因此可以做dfs递归,不断寻找边界0附近的0,也就是dfs的核心(不撞南墙不回头)。package com.leetcode;public class code130 { public void solve(char[][] board) { int m = b...原创 2019-12-07 17:15:57 · 178 阅读 · 0 评论 -
【leetcode】131.分割回文串
思路:DFS+回溯class Solution { List<List<String>>list=new ArrayList<>(); String s; public List<List<String>> partition(String s) { //从头到尾递归+回溯。 t...原创 2019-11-30 18:47:51 · 65 阅读 · 0 评论 -
【leetcode】137. 只出现一次的数字 II
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。参考一下大神的思路https://juejin.im/post/5cb962dbf265da03761e8601首先一般看到这种题,我们第一反应是做状态记录,比如数字x出现了y次.然后从记录里查询出现了一次的数字.但是 现在我们的空间复杂度被限制成了O(1),不可能对所有的64位二...原创 2019-11-29 20:20:47 · 116 阅读 · 0 评论 -
【leetcode】106.根据中序遍历和后序遍历构造二叉树
方法:在递归方法中,传入子数组的边界索引注意:在递归方法中,有一个数组的边界索引,得通过计算得到,计算的依据是递归方法传入的“中序遍历数组”(的子数组)和“后序遍历数组”(的子数组)的长度是一样的。我的办法是解方程计算未知数。具体需要计算哪个参数我在下面的代码中已经注明了。下面展示了一个计算边界的方法。尽管中序遍历和后序遍历方式不一样,但我们从图中可以看出:除了根节点的相对位置不同,根节...原创 2019-11-26 21:22:51 · 74 阅读 · 0 评论 -
【leetcode刷题】386字典排序
public List<Integer> lexicalOrder(int n) { List<Integer> res = new ArrayList<>(); for(int i=1;i<10;i++){ if(i<=n){ res.add(i);...原创 2019-11-25 20:34:05 · 87 阅读 · 0 评论