自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Achillessssss的博客

学习笔记

  • 博客(44)
  • 收藏
  • 关注

原创 LeetCode 318. 最大单词长度乘积

的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回。值与右侧值的按位或操作,然后将结果赋回给。是一个按位或赋值运算符。在这种情况下,它用于设置。

2023-11-06 22:43:53 270

原创 常规排序算法

排序算法快速排序private static void quickSort(int[] a, int start, int end){ if (a.length < 0){ return ; } if (start >= end){ return ; } } int left = start;

2021-06-03 12:24:24 144

原创 Java多线程

JAVA多线程知识点Java内存模型(JMM)java内存模型定义了程序中各种变量的访问规则。其规定所有的变量都存储在主内存(main memory),线程均有自己的工作内存(local memory)。工作内存中保存被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作空间进行,不能直接读写主内存数据,操作完成后,线程的工作内存通过缓存一致性协议将操作完的数据刷回内存。Java中volatile关键字作用**volatile是Java提供的一种轻量级的同步机制。**Java 语言包含两

2021-04-12 21:18:08 159

转载 explain命令的各项信息

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。(QEP:sql生成一个执行计划query Execution plan)mys.

2021-03-08 22:22:22 390

原创 LeetCode 424. 替换后的最长重复字符

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。示例 2:输入:s = “AABABBA”, k = 1输出:4解释:将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。子串 “BBBB” 有最长重复字母, 答案为 4。

2021-02-02 22:33:44 117

原创 LeetCode959. 由斜杠划分区域

在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。示例 1:输入:[" /","/ "]输出:2解释:2x2 网格如下:示例 2:输入:[" /"," "]输出:1解释:2x2 网格如下:示例 3:输入:[“\/”,“/\”]输出:4解释:(回想一下,因为 \ 字符是转义的,所以 “

2021-01-26 00:17:38 136

原创 LeetCode122. 买卖股票的最佳时机 II 、123. 买卖股票的最佳时机 III和 714. 买卖股票的最佳时机含手续费

给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能够达到的最大利润: 在此...

2020-12-17 15:16:32 119

原创 LeetCode406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是应该排在这个人前面且身高大于或等于 h 的人数。 例如:[5,2] 表示前面应该有 2 个身高大于等于 5 的人,而 [5,0] 表示前面不应该存在身高大于等于 5 的人。编写一个算法,根据每个人的身高 h 重建这个队列,使之满足每个整数对 (h, k) 中对人数 k 的要求。示例:输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,

2020-11-18 22:49:22 131

原创 LeetCode134. 加油站

在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例1:输入:gas = [1,2,3,4,5]cost = [3,4,5,1,...

2020-11-18 22:27:13 80

原创 1122. 数组的相对排序

给你两个数组,arr1 和arr2,arr2中的元素各不相同arr2 中的每个元素都出现在arr1中对 arr1中的元素进行排序,使 arr1 中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length, arr...

2020-11-14 20:39:57 125

原创 1356. 根据数字二进制下 1 的数目排序

给你一个整数数组arr。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中1的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 2 个 1 。[7] 有 3 个 1 。按照 1 的个数排序得到的结果数组...

2020-11-10 22:19:57 131

原创 LeetCode127. 单词接龙

给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例1:输入:beginWord = "hit",endWord ...

2020-11-05 22:30:27 136

转载 left join,right join,inner join,full join之间的区别

left join,right join,inner join,full join之间的区别参考https://www.cnblogs.com/assasion/p/7768931.htmlhttps://blog.youkuaiyun.com/rongbo_j/article/details/46352337sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的

2020-11-05 20:46:32 255

原创 LeetCode1207. 独一无二的出现次数

给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true提示:1 ...

2020-10-28 22:31:55 172

原创 LeetCode1365. 有多少小于当前数字的数字

给你一个数组nums,对于其中每个元素nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个nums[i]你必须计算出有效的j的数量,其中 j 满足j != i 且 nums[j] < nums[i]。以数组形式返回答案。示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。对于 nu...

2020-10-27 22:00:54 128

原创 LeetCode144. 二叉树的前序遍历

给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:和之前的中序、后序遍历相似,利用栈来完成迭代。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

2020-10-27 21:27:21 140

原创 LeetCode19. 删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:解法一:用普通的方法,先得到链表的长度,遍历整个链表,当到达需要删除元素的前一个时,将这个元素的next指针指向需要删除元素的下一个元素即可。解法二:双指针,因为进阶要...

2020-10-18 22:12:31 113

原创 LeetCode120. 三角形最小路径和

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。思路:这道题是动态规划的经典例题,同样类型的题还有求最大路径,没有本质区别,从上往下看时,元素只能选取下方和右下方的元...

2020-10-08 22:53:45 129

原创 LeetCode673. 最长递增子序列的个数

给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。思路:动态规划问题,要将问题问题划分为若干状态,这道题定义状态 dp[i]表示以i位置结尾的,即nums[i]值结尾的最长连续递增的长度,dp初始化为1,因为最少自身

2020-10-07 23:22:40 174

原创 LeetCode145. 二叉树的后序遍历

给定一个二叉树,返回它的后序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:后序遍历和前序遍历比较相似,区别在于添加元素的顺序有所不同,前序遍历是向后添加结点元素,后序遍历是向前添加,所以对比前序遍历算法只需要修改一下添加元素顺序即可,要注意的是代码中是将遍历元素向前添加,注意添加左右子树顺序。解法(迭代):/** * Definit...

2020-10-04 22:21:31 109

原创 面试题 04.03. 特定深度节点链表

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]思路:根据题意,创建同一深度上所有结点的链表,所以dfs和bfs中,bfs更适合本题,确...

2020-09-28 22:49:08 192

原创 LeetCode617.合并二叉树

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 1 2 ...

2020-09-23 22:10:25 63

原创 LeetCode589,590.N叉树的前序、后序遍历

一、给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历: [1,3,5,6,2,4]。说明:递归法很简单,你可以使用迭代法完成此题吗?思路:1、递归法:利用栈将需要遍历的节点放入,随后从栈中取出一个节点,得到当前节点的值,并且将其children逆序添加到栈中,这样在出栈的时候,我们得到的节点顺序是正向的,符合前序遍历的要求。2、迭代法:遍历每个子节点,对其进行前序遍历操作解法一(递归)/*// Definition for a N...

2020-09-22 23:14:36 91

原创 LeetCode538. 把二叉搜索树转换为累加树

给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ 20 13思路:多写两层搜索树就会很明显的发现,所求的每个节点的值...

2020-09-21 22:08:51 86

原创 LeetCode374.猜数字的大小

猜数字游戏的规则如下:每轮游戏,系统都会从1到n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,系统会告诉你,你猜测的数字比系统选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1或 0):-1 : 你猜测的数字比系统选出的数字大1 : 你猜测的数字比系统选出的数字小0 : 恭喜!你猜对了!示例 :输入: n = 10, pick = 6输出: 6思路:二...

2020-09-15 19:53:14 140

原创 LeetCode94.二叉树的中序遍历

给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:使用迭代算法需要利用栈来解决,根据中序遍历的规则,需要从根结点开始,一直寻找左结点,直到没有左结点为止,利用栈的原理将结点加入到集合中,接着处理右结点即可。解法一(递归):/** * Definition for a binary tree node. * public...

2020-09-14 21:10:08 90

原创 LeetCode257.二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:输入: 1/ \2 3\ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路:利用二叉树的深度优先遍历或者广度优先遍历即可。代码(DFS):class Solution { List<String> list = n...

2020-09-14 14:06:43 77

原创 LeetCode977. 有序数组的平方

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= A.length <= 10000-10000 <= A[i] <= 10000A已按非递减顺序排序。思路:这道题其实本身难度不大,暴力解法可以就可以轻松得到答案,但是通过暴...

2020-09-10 19:46:11 157

原创 LeetCode46.全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:回溯+递归的方法解答该题,首先看看leetcode上的大佬如何解释回溯和递归相结合,回溯算法-liweiwei,算法中需要注意的是在往res中添加新的元素时,需要new ArrayLIst<>(),因为java是值传递,地址添加到res中,在这里复制的...

2020-09-10 12:35:46 102

原创 LeetCode867.转置矩阵

给定一个矩阵A,返回A的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:1 <= A.length<= 10001 <= A[0].length<= 1000转置矩阵:将矩阵的行列互换...

2020-09-09 14:38:30 207

原创 LeetCode53.最大子序和

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。最近在学习动态规划题目,所以找了集中找了类似的题进行学习。看到这道题目,第一反应是进行暴力遍历,将所有的子序和得到进行比较,但是时间复杂度较高。当看到“连续子数组”,应该想想是不是应该考虑动态规划的思想去解决问题。对数组的遍历中,其中一种方法为以第i个元素...

2020-09-07 18:06:41 98

原创 LeetCode5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"一、中心扩散法:这道题第一个想到的方法是从中心扩散,从中心扩散需要考虑三种情况:字符串为空 字符串长度为1 字符串长度大于1其中,字符串长度大于1时,需要考虑从中心扩散的两种情况,例如,"babbcbbaa" 和"abbccd"两种情况,也就是以字符为.

2020-08-18 21:00:03 116

原创 LCP 01. 猜数字

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。示例 1:输入:guess = [1,2,3], answer = [1,2,3]输出:3解释:小A 每次都猜对了。示例 2:输入:guess = [2,2,3], answer ...

2020-08-15 18:43:24 106

原创 LeetCode20.有效的括号

给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出: true解题思路:将问题...

2020-08-14 22:44:03 106

原创 LeetCode1509.三次操作后最大值与最小值的最小差

给你一个数组nums,每次操作你可以选择nums中的任意一个元素并将它改成任意值。请你返回三次操作后, nums中最大值与最小值的差的最小值。示例 1:输入:nums = [5,3,2,4]输出:0解释:将数组 [5,3,2,4] 变成 [2,2,2,2].最大值与最小值的差为 2-2 = 0 。示例 2:输入:nums = [1,5,0,10,14]输出:1解释:将数组 [1,5,0,10,14] 变成 [1,1,0,1,1] 。最大值与最小值的差为 1-0 ...

2020-08-13 16:22:36 516

原创 LeetCode690.员工的重要性

给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和。示例 1:.

2020-08-11 20:16:18 162

原创 LeetCode13.罗马数字转整数

罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...

2020-08-10 19:13:35 102

原创 LeetCode12.整数转罗马数字

罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...

2020-08-05 15:24:52 168

原创 餐饮外卖竞品分析

    根据报告报告显示,2017年第4季度中国互联网餐饮外卖市场整体交易规模达677.3亿元人民币,环比上涨16.2%。与去年同期相比,增幅高达81.8%。2017年中国互联网第三方餐饮外卖市场用户规模为3亿人,环比增长率为15.4%,增速放缓。(数据来源:Analysys易观监测数据)     随着饿了么正式宣布合并百度外卖,美团外卖和饿了么占据了O2O餐饮的主要市场,所以选择做美团外卖和饿了...

2018-03-28 00:22:31 8932

原创 排序算法

一、冒泡排序:冒泡排序对一个需要进行排序的数组进行以下的操作1、1比较第一项和第二项;2、如果第一项应该排在第二项之后,那么两者交换顺序;3、比较第二项和第三项;4、如果第二项应该排在第三项之后,那么两者交换顺序;5、以此类推直到完成排序;实例说明:将数组[3, 2, 4, 5, 1]以从小到大的顺序进行排序:3应该在2之后, 因此交换, 得到[

2018-01-10 21:43:51 208

空空如也

空空如也

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

TA关注的人

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