12 2020 档案
摘要:题目链接:435.无重叠区间 思路:动态规划。假设第i个区间最少擦除n个区间,即dp[i]=n。所以第i+1个区间需要擦除最少的区间数为dp[i+1]=min(dp[i]+1, dp[j]+cnt);其中,cnt表示第i个区间与前i-j个区间重叠了,重叠数cnt=i-j。 代码: class Sol
阅读全文
摘要:题目链接:剪绳子 思路:由于n的范围变大了,无法使用动态规划,因为动态规划需要比较大小,而含有取模运算的数值是没法比较大小的。所以,参考题解。当n大于4时,尽量多地取3,当n小于4时,绳子就不进行分割了,因为怎么分绳子都不如自身乘进去来得大。 代码: class Solution { public
阅读全文
摘要:题目链接:二维数组中的查找 思路:二维矩阵数值分布特点是左上角高,右下角低。如果从最高处或最低处开始搜索,那么搜寻路径会很多。而从矩阵右上角开始搜索的话,可以发现,右上角的左边都是递减,下边是递增,那么,从左上角出发,比target大时,就走左边;比target小时就走下边,直到找到target或者
阅读全文
摘要:题目链接:从上到下打印二叉树 思路:队列 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(i
阅读全文
摘要:题目链接:把数字翻译成字符串 思路:从数字高位向低位进行遍历,假设遍历到第i个位置,那么开始判读可不可以和前面的数字进行组合:当不和前面的数字组合时,该位数字自己表示一个字符;当和前面数字组合时,先判断能不能组合,如01、31、26、40,这些只有一种翻译方式,也就是说只有和前面组合时位于[10,2
阅读全文
摘要:题目连接:86.分隔链表 思路:遍历一遍链表,将表中结点分为两类,一类是小于给定的x,另一类是大于等于x。输出结果时要考虑四种情况:输入的表头为空;没有小于x的节点;没有大于等于x的节点;既有小于x又有大于等于x的。 代码: /** * Definition for singly-linked li
阅读全文
摘要:题目连接:39.组合总和 思路:暴力遍历。先对数组排序,在进行枚举。 代码: class Solution { private List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combinationSum
阅读全文
摘要:题目:下一个排列 思路:找规律。在字典序中,用在字典中出现的次序代表该字符的值,用直接连接字符,那么最小排列的字符串就是单调递增的一条直线。从最小排列开始逐渐增大排列,那么可以发现从直线的末端开始,会不断的出现顶点并向前延伸,直到直线变成了单调递减。可以发现每一次增大的排列都是末端顶点向前移动。为了
阅读全文
摘要:题目链接:复杂链表复制 思路:哈希表。先遍历一遍用hash表存储新旧链表对应的结点,然后再遍历一遍通过哈希表确定新链表中random所指向的结点。 代码: /* // Definition for a Node. class Node { int val; Node next; Node rando
阅读全文
摘要:题目链接:剪绳子 思路: 暴力(会超时)。假设输入为n,那么当某个位置的左边长度为i,右边长度为n-i时,可以枚举出四种情况: 左边进行分段,右边进行分段。那么变成递归的行为,对左右段递归调用本方法。 左边不进行分段,右边进行分段。同理,对右边递归调用。左边长度为本身。 左边进行分段,右边不进行分段
阅读全文
摘要:题目链接:字符串的排序 思路:全排列字符顺序,要去重。先排序,因为想把重复的字符放在一起,这样遍历的时候方便处理重复的字符串;然后递归地遍历每个位置,组合所有情况。 代码: class Solution { private List<String> list = new ArrayList<>();
阅读全文
摘要:题目:29.两树相除 思路:搜索答案,使用二分。题目限定不能使用乘除取模,那么只能使用加减。最基础的想法就是不断的累加除数,直到累加的除数超过被除数时,前一个累加的除数就是结果。这种搜寻的过程可以使用二分方法。最开始的想法是设置一个数n,然后每累加除数(记作b),有n+=n; b+=b; 。然后当超
阅读全文
摘要:题目链接:205.同构字符串 代码: class Solution { public boolean isIsomorphic(String s, String t) { if(s.length() != t.length()) return false; char[] map = new char
阅读全文
摘要:题目链接:把数组排成最小的数 思路:对数组进行排序,假设要{x, y}组成最小数,那么通过比较"xy"和"yx"的大小,可以得到最小值,对整个数组按这种比较大小方式进行排序,最好得到的数组就是最小数。(证明见评论讲解) 代码: class Solution { public String minNu
阅读全文
摘要:题目链接:重建二叉树 思路:根据前序和中序的排列规律,在中序遍历时,根节点的左边是左子树结点,右边是右子树结点,而前序遍历中首先出现根结点,紧接着根结点的是左子树结点,然后是右子树结点。所以,我们只需要确定在前序和中序中根结点的位置,通过根结点可以知道左子树和右子树结点的位置,该问题便转化为根据左右
阅读全文
摘要:题目链接:数值的整数次方 思路:二分法。对幂次方进行二分,但需要考虑次方运算的特殊情况,这儿,0次方结果都为0,底数为1时结果都为1。 代码: class Solution { public double myPow(double x, int n) { if(x == 1 || x == 0) r
阅读全文
摘要:博客园样式更改时间12月25日。 今天对博客园的主题进行修改,使用的是开源的博客园主题模板,样式修改方法文档在这
阅读全文
摘要:题目:24.两两交换链表中的节点 思路:链表交换 代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode
阅读全文
摘要:题目链接:455.分发饼干 思路:排序。 代码: class Solution { public int findContentChildren(int[] g, int[] s) { int cnt = 0; Arrays.sort(g); Arrays.sort(s); for(int i=0,
阅读全文
摘要:题目链接:387.字符串的第一个唯一字符 代码: class Solution { public int firstUniqChar(String s) { int[] map = new int[26]; for(char c : s.toCharArray()){ map[c - 'a'] ++
阅读全文
摘要:题目链接:103.二叉树的锯齿形层序遍历 思路:双栈。 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre
阅读全文
摘要:题目链接:746使用最小费用爬楼梯 代码: class Solution { public int minCostClimbingStairs(int[] cost) { int fir, sec; fir = sec = 0; for(int i=2; i<=cost.length; i++){
阅读全文
摘要:316. 去除重复字母 Difficulty: 中等 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 **注意:**该题与 1081 相同 示例 1: 输入:s = "bcabc" 输出:"abc" 示例 2
阅读全文
摘要:题目链接:48. 旋转图像 思路:模拟。逐行旋转。 代码: class Solution { public void rotate(int[][] matrix) { for(int i=0; i<((matrix.length + 1)>>1); i++){ helper(matrix, i);
阅读全文
摘要:题目连接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 思路:动态规划。设置两个值为own和empty,分别表示第i天手上持有股票和没有股票。第i天手上持有股票时,如果前一
阅读全文
摘要:题目连接:https://leetcode-cn.com/problems/word-pattern/ 代码: class Solution { public boolean wordPattern(String pattern, String s) { String[] t = s.split("
阅读全文
摘要:题目链接:49. 字母异位词分组 思路:设置个哈希表,表键为排序后的字符串,表值为List,List中存放的字符串在排序后有相同的表键。 代码: class Solution { public List<List<String>> groupAnagrams(String[] strs){ Map<
阅读全文
摘要:题目链接:剑指 Offer 41. 数据流中的中位数 思路:极大堆、极小堆。因为输入是数据流不是数组,说明输入的数据是不确定的。一般来说先排序,然后返回中间数,但每查询一次就要排序,时间复杂度较高。所以想能不能每次查询都可以直接获取到中间数,而不是对输入的数据排序取中间数。那么,我们就把输入的数据分
阅读全文
摘要:题目链接:376. 摆动序列 思路:输入数组可以类似于折线图,那么每次波动只保留波峰和波谷就好。 代码: class Solution { public int wiggleMaxLength(int[] nums) { int len=0; for(int i=0,next = i; i<nums
阅读全文
摘要:题目链接:649. Dota2 参议院 思路:题目假设每个人能够作出最优决定,那么,当前参议员能够作出决定时,他一定是禁用他下一位另一派的参议员,这样才能保证己方能够处于优势地位。那么设banOfR和banOfD分别为R和D被禁的人数,每次遍历只需判断当前数是否有权利,没有权利说明他被上一位其他派的
阅读全文
摘要:题目链接:842. 将数组拆分成斐波那契序列 思路:暴力遍历。从长度为1开始,初始化n1、n2、n3,当n1+n2!=n3时,n3长度加1,直到超出字符串长度的一半;当n1+n2==n3时,令n1=n2,n2=n3,然后获取n3的值,并重新判断呢n1+n2是不是等于n3. 代码: class Sol
阅读全文
摘要:题目链接:62. 不同路径 代码: class Solution { public int uniquePaths(int m, int n) { int[][] path = new int[m][n]; for(int i=0; i<m; i++){ path[i][0] = 1; } for(
阅读全文
摘要:题目链接:剑指 Offer 56 - II. 数组中数字出现的次数 II 官方题解:面试题56 - II. 数组中数字出现的次数 II(位运算 + 有限状态自动机,清晰图解) 思路:数组中只有一个数字出现一次,其他数字出现三次,那么可以统计二进制各个位数上各自1出现的次数,然后模3,那么最后得到的二
阅读全文
摘要:题目链接:861. 翻转矩阵后的得分 思路:给一个0-1矩阵,每行表示一个二进制数,要求翻转矩阵后的各行之和的值最高。那么只要保证矩阵每列中的1出现次数最多就行,对于第一列,应该通过翻转使它全部为1,然后对后面的矩阵列只要保证每列1出现的次数大于等于矩阵行数一半就行。 代码: class Solut
阅读全文
摘要:题目:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ 思路:滑动窗口。用map记录每个字符出现的位置。当字符不在map中时,就往map中添加字符和位置,当字符在map中时
阅读全文
摘要:题目:https://leetcode-cn.com/problems/task-scheduler/submissions/ 官方题解:任务调度器 代码: class Solution { public int leastInterval(char[] tasks, int n) { char[]
阅读全文
摘要:题目:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/ 题意:将一个排序好的数组分割成多个长度不小于3的连续子序列,例如:输入[1,2,2,3,3,4],有“1,2,3”、“2,3,4”,可以分割;
阅读全文
摘要:题目:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/ 代码: class Solution { public int movingCount(int m, int n, int k) { LinkedList<
阅读全文
摘要:题目:https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/ 思路:从左往右遍历一遍,再从左往右遍历。 代码: class Solution { public int[] constructArr(int[] a) { int[
阅读全文
摘要:题目:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/ 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo
阅读全文