自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 收藏
  • 关注

原创 力扣题型总汇(下)

加油。

2022-02-21 17:14:40 287

原创 Day90(二叉树)

98、验证二叉搜索树450、删除二叉搜索树中的节点701、二叉搜索树中的插入操作

2022-06-02 11:41:59 172 2

原创 Day89(每日一题&二叉树)

442、数组中重复的数据给你一个长度为n的整数数组nums,其中nums的所有整数都在范围[1, n]内,且每个整数出现一次或两次。请你找出所有出现两次的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为O(n)且仅使用常量额外空间的算法(空间复杂度为O(1))解决此问题需要注意的是,遍历数组nums的过程中,遍历到的元素num可能已经被改成负数,因此在计算下标index时需要对num取绝对值然后减1class Solution { p...

2022-05-09 16:45:20 536

原创 Day88(二叉树)

113、路径总和 II给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。回溯算法和二叉树的结合class Solution { List<List<Integer>>res=new ArrayList<>(); List<Integer>list=new ArrayList<>(); public List<List&l...

2022-05-06 18:12:43 214

原创 Day87(二叉树、滑动窗口)

106、从中序与后序遍历序列构造二叉树给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。细节1://利用后序遍历可得后序遍历的最后一个结点为根结点int rootValue=postorder[postEnd-1];不能使用postorder[postorder.length-1] 因为是递归,而每一次的根结点都会变化的,所以应该使用postEnd-1来.

2022-05-05 12:18:28 889

原创 Day86(二叉树——广度遍历)

103、二叉树的锯齿形层序遍历给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。自上到下遍历,设根结点为第一层,那么当层数为奇数时,是从左到右遍历;当层数为偶数时,是从右到左遍历。if(deep%2==0) Collections.reverse(list);class Solution { public List<List<Integer>> zigzagLev...

2022-05-04 16:55:25 1016

原创 Day85(二叉树的层序遍历、滑动窗口)

908、最小差值 I其中x是一个范围为[-k, k]的整数。对于每个索引i,最多只能应用一次此操作。当最小值加上k比最大值减去k还要大,那么说明最小值可以通过调节k的值(k∈[-k, k])使得两者最大值减最小值为0。故当min>max时,直接return 0【例子:示例3】class Solution { public int smallestRangeI(int[] nums, int k) { int max= Arrays.st...

2022-05-03 21:27:19 691

原创 Day84(滑动窗口)

3、无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。注意细节:① 因为k-v k:字符 v:字符出现的索引位置。所以收缩窗口left是根据重复的字符的位置来,并不是直接++②left根据字符索引出现的位置上+1,并且不能后退。故left=Math.max(left,map.get(c)+1)【例子:abba】③max=Math.max(max,right-left);//不能写在if条件里,因为当s.length==1的时候,就只有一个字...

2022-04-29 12:24:09 391

原创 Day83(滑动窗口)

滑动窗口详解 - 知乎 (zhihu.com)438、找到字符串中所有字母异位词给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。class Solution { public List<Integer> findAnagrams(String s, String p) { List<Integer>list=ne...

2022-04-28 19:59:48 80

原创 力扣题型总汇——滑动窗口

滑动窗口算法基本原理与实践 - huansky - 博客园 (cnblogs.com)滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。其实这里就可以看出来滑动窗口主要应用在数组和字符串上。这里采用的是字符串来讲解。但是对于数组其实也是一样的。滑动窗口算法的思路是这样: 我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为

2022-04-27 19:41:38 273

原创 Day82(栈,优先级队列)

42、接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。暴力法class Solution { public int trap(int[] height) { int sum=0; for(int i=0;i<height.length;i++){ //第一个柱子和最后一个柱子不接雨水 if(i==0||i==height.length-1).

2022-04-26 17:31:38 159

原创 力扣题型总汇——栈和队列

由于栈结构的特殊性,非常适合处理对称匹配类的问题。最近相关性考虑栈 栈的特点先进后出栈还可以解决逆波兰表达式栈(Stack)——先进后出:stack<Integer>stack=new Stack<>();栈常用方法:1.boolean isEmpty( ):判断栈是否为空2.Object peek( ):返回位于栈顶的元素,但是并不在堆栈中删除它。3.Object pop( ):返回位于栈顶的元素,并在栈中删除它。——出栈4.Object push (Object e.

2022-04-25 20:28:16 513

原创 Day81(动态规划、十叉树遍历)

64、最小路径和给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。推导公式:dp[i][j]+=Math.min(dp[i][j-1],dp[i-1][j])+grid[i][j];class Solution { //注意是n行m列的矩阵,n和m可以不相等!!! public int minPathSum(int[][] grid) { int [][]...

2022-04-22 21:01:40 427

原创 Day80(动态规划——回文子串、打家劫舍)

647、回文子串给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。class Solution { public int countSubstrings(String s) { boolean [][]dp=new boolean[s.length()+1][...

2022-04-15 12:45:41 91

原创 Day79(动态规划——子序列之编辑距离、回文子序列)

72、编辑距离给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符dp[i][j]表示:i表示word1的长度,j表示word2的长度,word1的前i个字母转换成word2的前j个字母所使用的最少操作。递推公式里:如果不相等,三种情况——1.去word1里删除,那么最少操作次数有+1word1.charAt(i-1)!=word2.charAt(...

2022-04-14 21:52:25 154

原创 Day78(动态规划——子序列)

392、判断子序列给定字符串s和t,判断s是否为t的子序列。(例如,"ace"是"abcde"的一个子序列,而“aec”不是)法一:双指针法二:动态规划dp[i][j]:表示字符串A的前i个[0,i)元素和字符串B的前j个[0,j)元素最长公共子序列为dp[i][j]class Solution { public boolean isSubsequence(String s, String t) { int[][]dp=new int[s...

2022-04-13 17:25:57 798

原创 Day77(动态规划——子序列)

674、最长连续递增序列给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l],nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。因为要求的是连续的递增的子序列,所以nums[i]只需要和nums[i-1]比较大小,d

2022-04-12 23:02:19 236 1

转载 SSM框架

JAVA的三大框架是什么? - 知乎 (zhihu.com)什么是ssm框架? - 知乎 (zhihu.com)

2022-04-11 22:55:22 65

原创 Day76(动态规划——子序列问题)

6037、按奇偶性交换后的最大数字给你一个正整数 num 。你可以交换 num 中 奇偶性 相同的任意两位数字(即,都是奇数或者偶数)。第一次看错题了,以为是奇偶索引class Solution { public int largestInteger(int num) { //暴力 //每次找到的数字若为偶数,则向后遍历,寻找更大的偶数,若存在,则交换位置,否则不做处理 //每次找到的数字若为奇数,则向后遍历,寻找更大的奇数,若存在.

2022-04-11 22:29:22 467

原创 Day75(完全背包)

279、完全平方数给你一个整数n,返回和为n的完全平方数的最少数量。完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9和16都是完全平方数,而3和11不是。物品重量是i*i,所以遍历背包容量时,从物品重量i*i开始遍历class Solution { public int numSquares(int n) { //完全背包问题——最值问题 //背包容量:n 物品重量...

2022-04-09 17:34:06 200

原创 Day74(完全背包练习以及01背包的复习)

1094、最后一块石头的重量 II(01背包)有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎; 如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就...

2022-04-08 18:01:37 372

原创 动态规划题型——完全背包

总结:1.定义:完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。2. 01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。而完全背包的物品是可以添加多次的,所以要从小到大去遍历// 先遍历物品,再遍历背包for(int i = 0; i < weight.size(); i++) { // 遍历物品 for(int j = weight[i]; j <= bagWeight ; j++) { // 遍历背包容量 dp[j] =

2022-04-08 11:34:48 549

原创 Day73(动态规划——01背包应用问题)

416、分割等和子集给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。根据题目可得:该背包的容量为Sum(nums)/2、物品价值:nums[i]、物品重量:nums[i]返回值为dp[len - 1][target]——因为class Solution { public boolean canPartition(int[] nums) { //根据题目可得:该背包的容量为Sum(nums..

2022-04-06 21:56:21 912 1

原创 动态规划题型——01背包

内容知识来源于代码随想录代码随想录 (programmercarl.com)01 背包定义有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大法一:使用二维数组1.定义dp数组:dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少//定义dp数组:dp[i][j]表示背包容量为j时,前i个物品能获得的最大价值int wlen

2022-04-06 18:59:05 1016

原创 Day72(动态规划)

343、整数拆分给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。提示:2 <= n <= 58太难了QAQ,我想不出来————以为是找规律类型的,原来还是要有假设的思维class Solution { public int integerBreak(int n) { //求dp[n] 长度要为n+1 int dp[] = new int[.

2022-04-05 18:24:27 648

原创 Day70(贪心算法)

56、合并区间interval[i][0] interval[i][1] 1 3 2 6 8 10 15 18 class Solution { public int[][] merge(int[][] intervals) { //排序是按行排列的 Arrays.sort(intervals,new Comparator<int[]>(){ public int c.

2022-04-04 22:22:56 537

原创 Day71(动态规划)

746、使用最小花费爬楼梯给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。根据题目的意思就是:爬上第i个阶梯所花的费用=爬上这个阶梯所用的费用+站在这个阶梯所用的费用爬上这个阶梯所用的费用=从i-2层爬上来的或者是从i-1层爬上来的class Solution { public int

2022-04-04 22:12:59 909

原创 Day69(贪心算法)

435、无重叠区间和昨天的452的思路一模一样class Solution { public int eraseOverlapIntervals(int[][] intervals) { Arrays.sort(intervals,new Comparator<int[]>(){ public int compare(int[]o1,int[]o2){ if(o1[1]>o2[1]){

2022-04-02 23:39:00 325

原创 Arrays.sort重写排序顺序

(2条消息) java comparator 升序、降序、倒序从源码角度理解_山鬼谣me的博客-CSDN博客_comparator 倒序 //必须同时写这三个if条件来return 1、-1、0 //升序 if(o1>o2){ return 1;//o1>o2 返回1就是正序 }else if(o1<o2){ return 1; }else{ return 0; }

2022-04-01 22:59:17 1946 1

原创 Day68(贪心算法)

134、加油站根据示例2可知:1、rest=gas[i]-cost[i]>0才可以作为出发点。所以假设当前start=0为出发点,若gas[0]-cost[0]<0 则出发点就变成start=1(start=i+1),出发点变了,那么rest也要重置为0。2、如果rest=gas[i]-cost[i]>0,那么剩余油量就持续加:即rest+=gas[i]-cost[i]。3、gas的总和-cost的总和<0 返回-1,所以在遍历的时候要计算total+=g..

2022-04-01 22:58:22 397

原创 Day67(贪心算法)

45、跳跃游戏 II给你一个非负整数数组nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。只要考虑每一跳所能达到的最远位置就行了,也就是每次都选择最远可达的点,reach是当前需要进行跳跃的右界限,nextReach是下一次跳跃的右界限,nextReach的值一直动态更新,以保证每次跳跃都是最远的class Solution { publi.

2022-03-31 20:19:00 4786 5

原创 Day66(贪心算法)

860、柠檬水找零class Solution { public boolean lemonadeChange(int[] bills) { if(bills[0]==10||bills[0]==20) return false; int five=1,ten=0,twenty=0;//每个金额的张数 for(int i=1;i<bills.length;i++){ if(bills[i]==5)..

2022-03-30 21:32:06 3027

原创 力扣题型总汇——贪心算法

贪心算法总结:题目:

2022-03-28 22:52:51 3651

原创 Day65(回溯——棋盘)

51、N 皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。class Solution { //使其中任意两个皇后都不同列、同行和在一条斜线上" List<List<String>> ans = new ArrayList<&g

2022-03-28 22:38:10 411

原创 Day64(回溯)

46、全排列给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。排列和前面的组合、子集、分割字符串最大的不同就是不需要用startIndex,因为排列是每一个元素都要用到。而组合、子集、分割字符串是选完A,再挑A后面的元素进行组合法一:使用path.contains来判断元素是否被使用过class Solution { List<List<Integer>> ans=new ArrayList<&gt...

2022-03-27 20:09:26 391

原创 Day63(回溯)

172、阶乘后的零给定一个整数 n ,返回 n! 结果中尾随零的数量。详细通俗的思路分析 - 阶乘后的零 - 力扣(LeetCode) (leetcode-cn.com)class Solution { public int trailingZeroes(int n) { int ans=0; while(n>0){ n/=5; ans+=n; } retu..

2022-03-26 22:07:07 229

原创 Day62(回溯算法)

78、子集class Solution { List<List<Integer>> ans=new ArrayList<>(); List<Integer>path=new ArrayList<>(); public List<List<Integer>> subsets(int[] nums) { ans.add(new ArrayList<>(path))

2022-03-24 11:18:02 290

原创 Day61(回溯算法)

17、电话号码的字母组合sb.deleteCharAt(index);//StringBuffer新函数熟知class Solution { List<String> list=new ArrayList<>(); public List<String> letterCombinations(String digits) { if(digits.length()==0) return list;//注意点:如果没有这一句.

2022-03-23 23:00:23 202

原创 力扣题型总汇——数学逻辑/脑筋急转弯

数学逻辑/脑筋急转弯总结:脑筋急转弯题基本是举一些例子后得出结论的。题目:Day13:169多数元素Day19:2312 的幂Day19:263丑数Day21:3263 的幂Day22:3424的幂Day23:292Nim 游戏Day26:453最小操作次数使数组元素相等Day30:506相对名次Day40:2177找到和为给定整数的三个连续整数Day60:2038如果相邻两个颜色均相同则删除当前颜色...

2022-03-22 22:15:51 894

原创 Day60=====(回溯算法)

39、组合总和给你一个 无重复元素 的整数数组candidates 和一个目标整数target,找出candidates中可以使数字和为目标数target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。注意终止条件有两个:1.sum==target ans.add(new ArrayList<>(path));然后retur...

2022-03-22 22:06:25 347

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除