自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中,i += 1、i = i + 1和i++有何区别?

如需转载,请标明转载来源,总结和码字都不易啊!Java中,i += 1、i = i + 1和i++有何区别?今天在思考i += 1和i = i + 1的区别时,自己通过比较多种方式在编译期和字节码层面的差异,总结了本篇博客(纯原创!),本篇博客的所有实验都基于JDK8,不同版本的结果可能不同。当然本人水平有限(小白),可能有错误的地方,建议大家一起尝试一遍,看看大家的结果和结论是不是一样的,欢迎交流和指正,谢谢各位啦!Java中的整型类型默认为int,因此在对byte类型进行计算时,byte类型会自动

2022-01-13 19:53:08 3840 13

原创 Leetcode 207. 课程表(Java实现 超详细注释!)

Leetcode 207. 课程表拓扑排序题(其实本质是bfs),难点在于选取合适的数据结构并灵活运用。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { // 修每一门课之前所需修的课程数 int[] indegrees = new int[numCourses

2021-02-13 11:39:34 467

原创 Leetcode 77. 组合(Java实现 超详细注释!)

Leetcode 77. 组合回溯算法的入坑题,其实本质就递归暴力搜索 + 回退,我觉得这道题最难的点在于怎么剪枝(我其实在文中说的也不是很清楚,后面理解透了会回来补充完善!原谅现在的我也不知道该怎么表达,我尽力了,哈哈哈,勿喷!),加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { // 为了递归的参数尽可能少,这里把path和res都作为类变量,不影响算法的整体流程 List<List<Integer

2021-02-09 18:17:11 375

原创 Leetcode 424. 替换后的最长重复字符(Java实现 超详细注释!)

Leetcode 424. 替换后的最长重复字符滑动窗口,通过不断改变滑动窗口的范围来找到包含重复字母的最长子串的长度!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int characterReplacement(String s, int k) { // l为窗口的左边界,r为右边界 int l = 0, r = 0; // res为满足替换k次后窗口内都是同

2021-02-02 23:21:59 219 2

原创 Leetcode 692. 前K个高频单词(Java实现 详细注释!)

Leetcode 692. 前K个高频单词堆排序的经典问题,值得反复推敲!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public List<String> topKFrequent(String[] words, int k) { // 用HashMap记录每个word出现的次数,方便排序 Map<String,Integer> counter = new H

2021-02-01 18:03:03 239

原创 Leetcode 78. 子集(Java实现 超详细注释!)

Leetcode 78. 子集这道数组题其实有很多解法,可以用回溯、dfs等,这里给出一种最好理解的方法!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public List<List<Integer>> subsets(int[] nums) { // 初始化一个二维列表,存放返回的结果 List<List<Integer>> res =

2021-01-25 20:38:10 238 1

原创 Leetcode 959. 由斜杠划分区域(Java实现 超详细注释!)

Leetcode 959. 由斜杠划分区域依然是并查集+HashSet,这道题有点难啊,主要难点在于看题目后能否想到如何使用图来解决以及如何去根据已知条件构建并查集!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int regionsBySlashes(String[] grid) { int n = grid.length; // 初始化一个并查集 Dis

2021-01-25 12:28:24 110

原创 Leetcode 1319. 连通网络的操作次数(Java实现 超详细注释!)

Leetcode 1319. 连通网络的操作次数并查集+HashSet,这道题可以作为并查集的入门题,只要理解了并查集的原理,这道题在逻辑上是比较好理解的!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int makeConnected(int n, int[][] connections) { // 我们先判断是否可能使所有计算机都连通,所有都连通的必要条件为线缆的条数至少有n-1条,如

2021-01-23 15:49:20 173 1

原创 Leetcode 146. LRU缓存机制(Java实现 超详细注释!)

Leetcode 146. LRU缓存机制这道题比较经典,其实本质是一个双向链表+哈希表的题目,理解了这一点这题就不难啦!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class LRUCache { /** 本题由于需要不断地清理最久未使用的缓存,所以我们需要有一个先进先出的数据结构,并且方便增删的数据结构,可以用双向链表; 另外为了满足O(1)时间复杂度,链表在查找的时候比较慢,需要用hash表辅助,让hash表的键为key,值为所

2021-01-21 16:15:12 197 2

原创 Leetcode 1143. 最长公共子序列(Java实现 超详细注释!)

Leetcode 1143. 最长公共子序列这道题只需要返回两个字符串(非连续)最长公共子序列的(长度),这类字符串最大值的问题通常采用动态规划来解决!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int longestCommonSubsequence(String text1, String text2) { int n1 = text1.length(); int

2021-01-20 14:28:16 274 1

原创 Leetcode 1584. 连接所有点的最小费用(Java实现 超详细注释!)

Leetcode 1584. 连接所有点的最小费用并查集+最小生成树,不了解并查集和最小生成树的小伙伴建议可以先去了解这两种数据结构,然后再看答案就很容易看懂!本题题解参考leetcode的官方题解,但是去除了优化部分,更容易理解,另外加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int minCostConnectPoints(int[][] points) { int n = poin

2021-01-19 22:09:05 249

原创 Leetcode 123. 买卖股票的最佳时机 III(Java实现)

Leetcode 123. 买卖股票的最佳时机 III和之前的leetcode 188几乎差不多,也可以去看看那道题,这道题可以用来做那道题的铺垫!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int maxProfit(int[] prices) { // 这道题与leetcode188基本一致,重复的部分这里就不多做说明,更具体细节可以去看我之前的博客 int days

2021-01-09 12:51:48 166

原创 Leetcode 189. 旋转数组(Java实现 超详细注释!)

Leetcode 189. 旋转数组数组题,这个方法时间复杂度有点高,不过很容易理解!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public void rotate(int[] nums, int k) { // 比较容易想到的方法,这道题要求空间复杂度O(1),为了尽量节省空间我们每次向右移动一个位置,遍历k次,这样只需要维护两个变量pre和tmp int i = 0; // 通过

2021-01-08 16:43:31 102

原创 Leetcode 547. 省份数量(Java实现 超详细注释!)

Leetcode 547. 省份数量图的深度优先遍历,这道题只需要遍历求得连通子图的数量即可,比上次的399简单不少!自己根据理解加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int findCircleNum(int[][] isConnected) { /** 这道题的关键点在于我们只需要求出连通子图的个数,而不需要知道具体两个节点之间的权重关系之类的,所以这道题比较简

2021-01-07 10:19:33 287

原创 Leetcode 399. 除法求值(Java实现 超详细注释!)

Leetcode 399. 除法求值图+深度优先遍历,哇,好难!自己根据理解加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) { // 图的数据结构

2021-01-06 14:51:57 201

原创 Leetcode 830. 较大分组的位置(Java实现 超详细注释!)

Leetcode 830. 较大分组的位置逻辑模拟题,主要是要想到通过分组结束状态去反推分组开始时的状态!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public List<List<Integer>> largeGroupPositions(String s) { // 初始化一个返回结果的列表 List<List<Integer>>

2021-01-05 14:39:26 115 4

原创 Leetcode 509. 斐波那契数(Java实现 超详细注释!)

Leetcode 509. 斐波那契数动态规划,啪的一下很快啊!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int fib(int n) { // 因为n会有输入<2的时候,我们要处理一下,否则后面赋值会越界 if (n < 2) return n; // 动态规划数组构建,注意因为F(0) = 0,所以数组的总长度是n+1 i

2021-01-04 15:57:19 130

原创 Leetcode 86. 分隔链表 (Java实现 超详细注释!)

Leetcode 86. 分隔链表好久没做链表的题啦,这道题还是比较好理解的!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public ListNode partition(ListNode head, int x) { // 思路非常简单,尽量将时间复杂度降到O(n),我们将原链表中小于x的节点放到一个链表中,其余都放到另一个链表中,最后再将前者和后者连接起来 ListNode lo

2021-01-03 19:37:56 125

原创 Leetcode 239. 滑动窗口最大值 (Java实现 超详细注释!)

Leetcode 239. 滑动窗口最大值涉及双向队列,说实话有点难理解啊!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; // 由于滑动窗口本质就是每次删除最前面的一个元素,添加一个元素再后面,因此这里我们用双向队列存储滑动窗口内的元素,方便增删

2021-01-02 15:45:49 148

原创 Leetcode 605. 种花问题(Java实现 超详细注释!)

Leetcode 605. 种花问题2021第一道贪心,理清思路就不难,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { // 其实这道题原理比较简单,题目问我们该花坛能否再种下n朵花,我们转换成贪心的思想,直接求出这个花坛中最多还能种多少花 // 计数还能再种多少花

2021-01-01 17:27:52 212

原创 Leetcode 435. 无重叠区间(Java实现 超详细注释!)

Leetcode 435. 无重叠区间动态规划,这道题动态规划的细节有点难理解,也很难想清楚,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int eraseOverlapIntervals(int[][] intervals) { // 判空,没有区间当然是不需要移除啦 if (intervals.length == 0) return 0; // 我们首

2020-12-31 21:24:50 200

原创 Leetcode 1046. 最后一块石头的重量(Java实现 超详细注释!)

Leetcode 1046. 最后一块石头的重量两种方法!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { // 方法1:逻辑删除+寻找最大值法;时间击败100% public int[] getMaxAndIndex(int[] stones){ // 该方法功能:输入一个数组,返回数组中的最大值及其索引构成的数组 int[] res = new int[2]; i

2020-12-30 13:29:06 103

原创 快速排序(Java+Python3实现 Java版含超详细注释!)

快速排序常见的快速排序算法!Java版加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int[] sortArray(int[] nums) { // 用快排对nums进行排序 quick_sort(nums,0,nums.length - 1); return nums; } public void quick_sort(int[] nums

2020-12-29 17:53:10 86

原创 Leetcode 188. 买卖股票的最佳时机IV(Java实现 超详细注释!)

Leetcode 188. 买卖股票的最佳时机IV目前碰到的最难的动态规划啦!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int maxProfit(int k, int[] prices) { // 判空 if (prices.length <= 0 || k <= 0){ return 0; } //

2020-12-28 18:23:56 203 2

原创 Leetcode 455. 分发饼干(Java实现 超详细注释!)

Leetcode 455. 分发饼干圣诞节发饼干啦,和昨天的发糖果一样也是贪心!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int findContentChildren(int[] g, int[] s) { // 方法1:贪心+单排序 /** 一开始想到的方法,我们贪心地尽量把尽可能小又能满足孩子的饼干给该孩子; 我们可以把饼干从小到大

2020-12-25 12:10:44 406

原创 Leetcode 135. 分发糖果(Java实现 超详细注释!)

Leetcode 135. 分发糖果这道题考察对贪心思想的实际运用能力,读懂题目并转换为解答方案是解决问题的第一步!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public int candy(int[] ratings) { /** 这道题的思路:先从左往右遍历,右边的分值比左边大,那右边的糖果就多分一个;再从右往左遍历,左边的分值比右边大,那左边的糖果就多分一个;

2020-12-24 15:54:08 461 1

原创 Leetcode 387. 字符串中的第一个唯一字符(Java+Python3实现 超详细注释!)

Leetcode 387. 字符串中的第一个唯一字符比较简单的一道题,主要是考察字符串的处理以及哈希表的使用,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java(两种实现方法):class Solution { public int firstUniqChar(String s) { // 方法1:通过set找到重复的元素(时间复杂度比较高,建议用后面的那种) if (s.length() == 0) return -1;

2020-12-23 14:03:15 103

原创 Leetcode 103. 二叉树的锯齿形层序遍历 (Java+Python3实现 超详细注释!)

Leetcode 103. 二叉树的锯齿形层序遍历之前写过Python版本的层序遍历,这道题只是加了一个锯齿形遍历,基本思路是一致的,Java和Python都实现了一遍,Python没加注释,详细的注释可以看之前写的那道题。Java版加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root)

2020-12-22 13:31:10 135 1

原创 剑指 Offer 07. 重建二叉树(Java实现 超详细注释!)

剑指 Offer 07. 重建二叉树使用列表+递归实现,虽然时间复杂度比较高,因为列表通过值查索引的效率不高,但是胜在好理解!加了详细的注释,方便自己日后复习,同时也希望可以帮助其他人,如有错误,欢迎指正class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { // 用两个ArrayList分别存储前序和中序遍历的数组 // 前序的列表是为了更方便地得到根节点

2020-12-21 18:04:52 157 2

原创 Leetcode 746. 使用最小花费爬楼梯(Java实现 超详细注释!)

Leetcode 746. 使用最小花费爬楼梯常规动态规划题。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public int minCostClimbingStairs(int[] cost) { // 常规动态规划,唯一的不同的是这次可以有两个起点,所以我们用索引0和1的位置分别记录这两个起点,那么dp的数组长度就需要cost.length + 1 int n = cost.length + 1;

2020-12-21 15:51:11 162 2

原创 Leetcode 316. 去除重复字母(Python3实现 超级详细注释!)

Leetcode 316. 去除重复字母单调栈 + 贪心思想。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution: def removeDuplicateLetters(self, s: str) -> str: # 初始化一个栈,等会儿用来做单调栈使用(虽然这道题的单调栈不是严格意义上的单调栈,但是思想是一致的) stack = [] # 记录每一种字母的剩余次数 rema

2020-12-20 13:55:18 576

原创 Leetcode 48. 旋转图像 (Java + Python3实现 超详细注释!)

Leetcode 48. 旋转图像其实本质就是将一个矩阵顺时针转九十度,但是注意这道题系统返回的是matrix原地址的那个矩阵,而不是matrix这个变量。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public void rotate(int[][] matrix) { int n = matrix.length; // 构造一个新矩阵,用来存储旋转后的矩阵值 int

2020-12-19 14:03:57 95 2

原创 Leetcode 389. 找不同 (Java + Python3实现 超详细注释!)

Leetcode 389. 找不同这道题主要考察字符串的一些细节处理,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!Java实现:class Solution { public char findTheDifference(String s, String t) { int s_sum = 0, t_sum = 0; for (int i = 0; i < s.length(); i++){ s_sum

2020-12-18 10:55:36 137

原创 Leetcode 714. 买卖股票的最佳时机含手续费(Java实现 超详细注释!)

Leetcode 714. 买卖股票的最佳时机含手续费久违的动态规划,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public int maxProfit(int[] prices, int fee) { int len = prices.length; // 构建一个 n*2 的二维数组 int[][] dp = new int[len][2]; // 动态规划的初

2020-12-17 13:12:37 149

原创 Leetcode 290. 单词规律(Java实现 超详细注释!)

Leetcode 290. 单词规律双HashMap + 单次遍历 + split,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public boolean wordPattern(String pattern, String s) { // 构造两个HashMap,分别用来存储双向键值对 Map<String,Character> str2char = new HashMap<St

2020-12-16 12:22:41 216

原创 Leetcode 738. 单调递增的数字(Java实现 超详细注释!)

Leetcode 738. 单调递增的数字又又又是贪心呀!很好理解的一种方法,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public int monotoneIncreasingDigits(int N) { // 将整数转成一个字符数组,方便遍历 char[] N_str = Integer.toString(N).toCharArray(); // i之前(含i)的最大值(有什么

2020-12-15 17:50:51 214

原创 Leetcode 649. Dota2 参议院 Java实现(超详细注释!)

Leetcode 649. Dota2 参议院又又是贪心呀!主要是模拟整个投票的过程,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public String predictPartyVictory(String senate) { // 初始化两个队列,存储两个阵营的参议员行使权力的顺序 Queue<Integer> radiant_queue = new LinkedList<In

2020-12-11 10:39:06 141

原创 Leetcode 861. 翻转矩阵后的得分 Java实现(超详细注释!)

Leetcode 861. 翻转矩阵后的得分又是贪心呀,今天来个Java版!加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution { public int matrixScore(int[][] A) { // 贪心:我们需要求出每一列的最大值,因为每一列的1实际的值求算方法是一致的,即1 << (n - c - 1),其中c为第c列; // 行数 int m = A.length;

2020-12-07 10:59:36 110

原创 Leetcode 321. 拼接最大数(Python3实现,面向小白,超详细注释!!!)

Leetcode 321. 拼接最大数比较复杂,但是比较好理解的一种方法。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution: def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]: # m和n分别表示nums1和nums2的长度 m = len(nums1) n = len(nums2)

2020-12-02 14:42:28 396

原创 Leetcode 767. 重构字符串 Python3实现(超详细注释!)

Leetcode 767. 重构字符串 Python3实现判断一个字符串能否通过重新排布其中的字母,使得两相邻的字符不同。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!class Solution: def reorganizeString(self, S: str) -> str: # 基于贪心的思想,当S中字母总数为偶数时,如果一个字母出现的次数最多不超过n/2时,我们可以用其他字母把该字母全部隔开; # 当S中字母总数为奇数

2020-11-30 11:40:08 434

空空如也

空空如也

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

TA关注的人

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