- 博客(59)
- 收藏
- 关注
原创 209. 长度最小的子数组
给定一个含有n个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 ...
2021-04-15 22:16:38
126
原创 回溯算法求解组合求和问题
由于该题中无重复元素,因此不需要考虑树的一层中去重问题,class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res=new ArrayList<>(); backtrack(res,new ArrayList<>(...
2021-04-01 19:31:03
256
原创 回溯法求解子集问题
子集问题1:利用回溯法求解子集问题,可以将子集比作n叉树,由于该题中数组元素都不相等,则不需要进行去重 class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> list=new ArrayList<>(); backtrack(list,new ArrayL...
2021-03-31 14:56:31
1685
原创 股票问题
121.买卖股票的时机I给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:动态规划dp[i][0]表示第i天持有股票获得的利润,这可以由两个状态推出来 得到dp[i][0]=max(dp[i-1][0],-prices[i])第i-1天持..
2021-03-31 10:21:17
117
原创 字节笔试:特征提取
题目描述 小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2and y_1=y_2,那么这俩是同一个特征。 因此,如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现,那么它将构成特征运动。比如,特征<a, b>在第2/3/4/7/8...
2021-03-29 13:08:35
197
原创 合并K个已排序的链表
解题思路两两进行排序import java.util.*;/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution {...
2021-03-19 18:30:42
76
原创 数组中的3个数之和为0
解题思路从头到尾-2遍历数组,每次从中取出一个数num[i],然后定义i+1,num.length-1两个指针,当left<right时:循环 如果num[i]+num[left]+num[right]==0,则加入list中 如果小于0,则L++ 如果大于0 ,则R--直到结束参考代码import java.util.*;public class Solution { public ArrayList<...
2021-03-18 21:15:46
850
原创 在转动过的有序数组中寻找目标值
解题思路:这种情况下分为两种情况[0,1,2,3,4,5,6]-->[3,4,5,6,0,1,2]这种情况是左边小于中间,左边有序,此时假设判断target是不是在left和mid中间,如果在,则right=mid-1,否则left=mid+1;[0,1,2,3,4,5,6]-->[5,6,0,1,2,3,4]这种情况是左边大于中间,右边有序,此时判断target是不是在mid和right中间,如果在,则left=mid+1,否则,right=mid-1参考代码imp...
2021-03-18 20:26:31
199
原创 2021-03-14
解题思路1.只要一个左上角坐标(tr,tc)和一个右下角坐标(dr,rc)就可以确定一个矩阵的一周,每次依次遍历一周import java.util.*;public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { if(matrix==null || matrix.length==0 || matrix[0].length==0){ ...
2021-03-14 22:15:59
99
原创 两个链表生成相加链表
解题思路:首先将链表1和链表2反转,得到7->3->9 和3->6然后从头开始两两相加得到sum=head1.val+head2.val+jinwei,将之和sum%10放入新的链表中,进位为sum/10最后将结果链表反转参考代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solu..
2021-03-14 21:22:30
98
原创 大数加法
解题思路两个字符串相加,创建一个StringBuilder用于存放相加后的结果当两个字符串有一个索引大于等于0,或者进位不为0时 两个字符串从最后一个字符开始相加,然后将相加结果sum取余10放于sb中,进位为sum/10;计算结束后,将sb反转后转化为字符串。参考代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直...
2021-03-13 14:25:56
151
原创 删除链表倒数第K个节点
思路:1.首先让快指针走K步,如果fast==null(K等于链表的长度),说明要删除的为链表第1个节点,直接返回head.next2.然后让快慢指针一起走,直到走到链表结束,此时慢指针在倒数第K+1个节点,直接执行slow.next=slow.next.next即可。参考代码:import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */publi
2021-03-11 15:20:00
1056
原创 MySQL索引:红黑树、B+树、MyISAM存储引擎与Innodb存储引擎
一、二叉搜索树:会退化到链表二、AVL树(严格的平衡二叉树)需要满足所有节点的左右子树高度差不超过1,只要不满足,就要通过旋转来保持平衡,不适用于频繁添加、删除操作三、红黑树(弱平衡二叉树)存在树高度较高 的问题四、B+树B+树:非叶子节点不存放data,只存储索引(冗余),可以放更多索引五、MyISAM存储引擎与Innodb存储引擎MyISAM存储引擎与Innodb存储引擎是对于表而言的。MyISAM存储引擎对应的表与Innodb的区别:1.InnoDB支持事.
2021-03-07 15:20:33
324
原创 Failed to convert value of type ‘org.springframework.web.multipart.support.StandardMultipartHttpServ
2021-02-22 18:16:37
850
原创 IDEA向MySQL数据库中添加信息,中文显示问号?的解决方法
在jdbc.properties文件中的url后面添加 ?characterEncoding=UTF-8例如:url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
2021-01-08 12:47:34
2421
2
原创 二叉树的层级遍历
515. 在每个树行中找最大值本题采用二叉树的层级遍历进行求解,分别处理每一层,从中找到最大值/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * ..
2020-12-27 21:44:06
133
原创 动态规划5:62. 不同路径
由于该题只能向下或者向右移动,对于第一行,只能来自左边,对于第一列,只能来自上面,所以该题首先讨论第一行和第一列,对于中间的,采用动态规划,递推公式为dp[i][j]=dp[i-1][j]+dp[i][j-1]```javaclass Solution { public int uniquePaths(int m, int n) { int[][] dp=new int[m][n]; dp[0][0]=1; for(int i=1;i<.
2020-12-18 21:24:28
93
1
原创 动态规划4:64. 最小路径和
本题规定只能向右、向下移动。利用动态规划求解,新建一个二维数组dp[m][n]递推公式:dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];其中,对于第一行,当前数只能来自左边;对于第一列,当前数只能来自上方,这两种情况需单独处理。class Solution { public int minPathSum(int[][] grid) { int[][] dp=new int[grid.length][grid[...
2020-12-18 19:03:42
161
1
原创 动态规划3:213. 打家劫舍 II
分两种情况进行处理:1.偷第一间,不偷最后一间;2.偷最后一间,不偷第一间递推公式:dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i])注意初始条件:dp1[1]=Math.max(nums[0],nums[1]);class Solution { public int rob(int[] nums) { if(nums.length==0){ return 0; } if(num...
2020-12-07 19:25:39
119
原创 动态规划1:剑指 Offer 42. 连续子数组的最大和
递推公式为:dp[i]=Math.max(dp[i-1],0)+nums[i];class Solution { public int maxSubArray(int[] nums) { int cur=nums[0]; int max=cur; for(int i=1;i<nums.length;i++){ cur=Math.max(cur,0)+nums[i]; max=Math.max(..
2020-12-07 18:52:28
74
原创 动态规划2:面试题 17.16. 按摩师
class Solution { public int massage(int[] nums) { if(nums.length==0){ return 0; } if(nums.length==1){ return nums[0]; } if(nums.length==2){ return Math.max(nums[0],nums[1]);...
2020-12-07 18:45:03
141
原创 剑指 Offer 64. 求1+2+…+n
解题思路;1.首先利用位运算实现两个整数的和 循环实现无进位相加(^)和只计算进位(a&b<<1),直到a&b<<1为0时结束2.然后循环,第i次将i-1次的结果加上iclass Solution { public int sumNums(int n) { int sum=0; for(int i=1;i<=n;i++){ sum=fun(sum,i); ...
2020-12-05 19:41:46
65
原创 剑指 Offer 63. 股票的最大利润
class Solution { public int maxProfit(int[] prices) { //1.如果数组长度为0或者为1,则返回0; int n=prices.length; if(n==0||n==1){ return 0; } //2.设置最低利润为0 int max=0; //3.得到两个相邻元素之差 int[] res=.
2020-12-02 15:06:29
59
原创 剑指 Offer 42. 连续子数组的最大和
解题思路: 本题使用动态规划,1.定义一个状态数组dp,dp[i]表示以元素nums[i]为结尾的最大和2.dp[0]=nums[0]3.dp[i-1]>0,说明前i-1个元素的最大和对第i个元素有贡献,则dp[i]=dp[i-1]+nums[i] dp[i-1]<=0,则dp[i]=nums[i]4.返回dp数组中的最大值class Solution { public int maxSubArray(int[] nums) { int[...
2020-11-24 19:00:08
53
原创 剑指 Offer 50. 第一个只出现一次的字符
解法一:利用HashMap1.如果s为空或者长度为0,返回' ';2.将s转化为数组,然后将数组中元素分别放入hashmap中,key表示字符,value表示个数3.然后判断字符对应的个数是否为1,若为1直接返回class Solution { public char firstUniqChar(String s) { if(s.length()==0||s==null){ return ' '; } ch..
2020-11-23 19:58:16
52
原创 剑指 Offer 16. 数值的整数次方
解题思路:1.如果n==0,直接返回1;2.如果n大于0,计算x的n次方,3.如果n小于0,则将n取绝对值,x变为倒数,计算(1/x)的n次方注意:n的取值范围为[-2^31, 2^31-1];如果n为-2^31,而其绝对值为2^31不在int型范围内,所以首先需要将n转化为long型;class Solution { public double myPow(double x, int n) { double res=1.0; ...
2020-11-22 21:52:01
69
原创 剑指 Offer 10- II. 青蛙跳台阶问题
class Solution { public int numWays(int n) { if(n==0||n==1){ return 1; } if(n==2){ return 2; } int first=1; int second=2; int res=0; for(int i=3;i<=n;i++){ ...
2020-11-22 21:45:38
76
原创 剑指 Offer 10- I. 斐波那契数列
class Solution { public int fib(int n) { if(n<=1){ return n; } int first=0; int second=1; int res=0; for(int i=2;i<=n;i++){ res=(first+second)%1000000007; first=s...
2020-11-22 20:32:40
79
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
解题思路:利用HashMap得到数字在数组中出现的次数,如果次数大于数组长度的一半,则返回。该方法时间和空间复杂度都是O(1)class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> map=new HashMap<>(); Integer res=0; for(Integer i:nums){ ..
2020-11-21 21:30:10
59
原创 剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法一:该方法需要经过二进制长度次循环解题思路:当n!=0时循环,利用n&1判断n的最后一位是否为1,然.
2020-11-21 20:32:54
52
原创 剑指 Offer 54. 二叉搜索树的第k大节点
解题思路:因为题目要求找到搜索二叉树第k大节点,搜索二叉树的特点是当前节点比左子树所有节点大,比右子树所有节点小,所以搜索二叉树中序遍历递增本题等价于中序遍历倒序第k个节点(1)利用非递归方法实现中序遍历,然后过程中k的值递减,当k减为0之前,返回当前节点的值。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr..
2020-11-20 18:51:09
97
原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
解题思路:1.非递归解法:因为是搜索二叉树,所以当前节点比左子树所有节点值大,比右边小1)比较当前节点root.val与p.val,q.val的大小 如果root.val<p.val && root.val<q.val,说明p,q在root的右子树上 如果root.val>p.val && root.val>q.val,说明p,q在root的左子树上 如果root.val>p.val &...
2020-11-19 22:00:58
71
原创 剑指 Offer 28. 对称的二叉树
解题思路:1.非递归(1)如果root为空,则直接返回true;(2)创建一个队列,将root的左节点入队,在让root的右节点入队(3) 当队列不为空,循环 每次出队两个节点分别赋值为left,right:如果两个节点都为空,则继续, 如果有一个为空,则返回false 如果两个节点的值不...
2020-11-19 20:33:40
68
原创 剑指 Offer 32 - III. 从上到下打印二叉树 III
解题思路:层级遍历看本题思路之前首先看1.剑指 Offer 32 - III. 从上到下打印二叉树 :https://blog.csdn.net/Mr_Jiax/article/details/1097835022.剑指 Offer 32 - III. 从上到下打印二叉树 II:https://blog.csdn.net/Mr_Jiax/article/details/1097874193.在前两题的基础上,设置一个标志位flag,如果为true,则从左到右打印,如果为false,则从右..
2020-11-19 18:42:07
83
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II
解题思路:层级遍历1.在每一层中,遍历该层所有节点,并将节点的值存放到ArrayList中,然后加入到res中/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { ..
2020-11-18 21:38:09
51
原创 剑指 Offer 32 - I. 从上到下打印二叉树
题目:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。解题思路:层级遍历常用队列,从左向右,如果一个节点有左或者右孩子,则将左右孩子存放在队列中1.如果root为空,则返回空数组;2.创建一个队列queue,用于存放节点;一个ArrayList用于存放遍历过的节点的值3.首先将root放入队列,4.循环,当队列不为空时, queue中队头节点root出队:开始判断root的左右孩子是否为空,如果不为空,则将左右孩子入队,且存放在ArrayList中,...
2020-11-18 19:42:58
93
原创 剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:按层遍历,每遍历一层,res加11. 如果头节点为null,则
2020-11-18 18:41:32
66
原创 剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路
2020-11-15 10:35:20
60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人