自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

破浪会有时的博客

长风破浪会有时,直挂云帆济沧海

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

原创 会议室管理问题---贪心算法

思路这题要用贪心算法来做,具体贪心的地方就是我们先把所有的会议按照结束时间排序,然后我们只考虑当前时间能开的结束时间最早的会议,然后就可以计算出来最多的宣讲场次。这里需要理解的是sort()的使用方法,详见之前的文章。代码import java.util.Arrays;public class programmertest { public static class Program { public int start; public int end;.

2021-09-21 12:16:43 354

转载 java浮点数精度问题

问题java中执行以下代码预期结果肯定是0.1System.out.println(1.0 - 0.9);但事实上运行结果为原因Java中的小数使用double和float表示,小数属于浮点型(默认为double)。对于float型的值,则要在数字后加f或F,如12.3F,它在机器中占32位,4个字节来存储,表示精度较低。double是64位。那么一个小数在Java中是如何存储的呢?Java语言中,float类型数字在计算机中的存储遵循IEEE-754格式标准:(1)一个浮点数有3部

2021-09-18 11:24:54 1061

原创 compareTo方法的运用---最大数

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”示例 4:输入:nums = [10]输出:“10”提示:1 <= nums.length <= 1000 <= nums[

2021-08-30 00:48:03 425

原创 Mysql语句的书写规则

这里会记录一些Mysql的语句的关键字等信息,以备自己复习select ,distinct ,order byDistinct 作用是去重 在select之后使用使用通配符筛选数据要用like,如果不用通配符就可以用=或者!=Order by用来排序,其中desc是降序,asc是升序。然后order by之后可以用limit来设定显示的条目数量,limit后可跟offset来设定从第几个数据开始显示。例子:SELECT distinct title FROM movies where direc

2021-08-30 00:25:40 428

原创 二叉树相关力扣题目

二叉树的中序遍历给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100

2021-08-13 16:28:10 169

原创 哈希表相关力扣问题

最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例 2:输入:s = “a”, t = “a”输出:“a”示例 3:输入: s = “a

2021-08-12 15:32:57 178

原创 括号相关问题

有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true来源:力扣(LeetCode

2021-08-08 21:15:52 233

原创 大根堆(队列)的使用---滑动窗口最大值

大根堆的使用大根堆的定义是这样的PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() { public int compare(int[] cp1, int[] cp2) { return cp1[0] == cp2[0] ? cp2[1] - cp1[1] : cp2[0] - cp1[0];} });这里先是判定数组角标0的位置是否相同,如果不相同就按照数

2021-08-08 12:08:50 403

原创 链表相关题目

这里会总结一点链表相关的题目来供自己复习合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1

2021-08-05 00:16:48 170

原创 前缀和的例子---和为k的子数组

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。思路这一题的思路有两种,分别是暴力枚举和前缀和来完成。先写下暴力枚举暴力枚举暴力枚举就是用两个指针,j表示子数组的结尾,i表示子数组的开头,我

2021-08-02 15:53:19 184

原创 动态规划的应用---单词拆分

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDict = [

2021-08-01 16:17:24 123

原创 sort()方法对二维数组排序的应用

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1,4],[4,5]]

2021-07-28 00:04:25 3227

原创 动态规划---入门ⅤⅢ

今天看的是01背包问题的相似题目目标和给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:

2021-07-25 13:26:14 225

原创 动态规划---入门ⅤⅡ

代码dp数组的表格动态规划的优化空间复杂度的优化,可以优化到只用一行也就是一维数组来动态规划。思路就是只用一行来记录,此外还需要一个变量来记录本次遍历中这个一维数组被覆盖掉的值,用来计算下一次的遍历。除此之外,我们还可以挑选长度较短的字符串作为j(也就是作为列),这样一维数组的长度还可以进一步降低。...

2021-07-20 15:32:38 135

原创 凑硬币问题的扩展---完全平方数

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9提示:

2021-07-01 15:27:14 139

转载 leetcode刷题---热门百题---岛屿数量---dfs

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [[“1”,“1”,“0”,“0

2021-04-29 17:44:25 172

转载 leetcode刷题---矩阵的路径---dfs

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“

2021-04-28 17:09:20 200

原创 leetcode刷题---剑指offer---剪绳子---动态规划,贪心算法

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 3

2021-04-28 15:14:41 159

原创 leetcode刷题---剑指offer---二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 ta

2021-04-19 18:29:45 169

原创 动态规划---入门Ⅵ

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.lengthn == grid[i].length1 <= m, n <= 2000 <=

2021-04-17 22:16:03 201

原创 数组中只出现一次数字相关问题

这种题型遇到过好多次了,于是决定把他们收集整理下来也方便自己记忆hashmap和hashset的常用方法只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems

2021-04-11 11:42:50 124

原创 leetcode刷题---热门百题---旋转链表

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]输入:head = [0,1,2], k = 4输出:[2,0,1]题解代码摘抄于评论区老哥class Solution { public ListNode rotateRight(ListNode head, int k) { // 1. 特判 if(k == 0 || head ==

2021-04-08 16:53:19 134

原创 环形链表相关---快慢指针法

给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?输入:head = [3,2,0,-4], pos = 1

2021-04-08 11:40:41 189

原创 leetcode刷题---热门百题---子集---dfs

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互不相同题

2021-04-07 15:14:48 135

原创 leetcode刷题---热门百题---螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix[i].length1 <= m, n <= 1

2021-04-07 11:02:32 385 2

原创 动态规划---入门V

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。我写的“动态规划”这题我写的时候想

2021-04-02 17:17:41 79

转载 leetcode刷题---热门百题---相交链表---双指针

编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0

2021-03-27 11:18:10 90

原创 leetcode刷题---热门百题---合并两个有序数组---双指针

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1 = [1], m =

2021-03-26 16:41:46 103

原创 leetcode刷题---热门百题---爬楼梯---动态规划

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶这题使用动态规划来完成,我们看了题目之后知道爬楼梯可以一次两层楼或者一层楼,这意味着dp【x】来源于dp【x-1

2021-03-26 15:39:59 87

转载 leetcode刷题---热门百题---删除有序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(num

2021-03-26 11:44:16 91

原创 动态规划---入门Ⅳ

最长公共子序列之所以在nums1【i-1】和nums2【i-1】不相等的时候,我们要看dp(i-1,j)的dp(i,j-1)的最大值,是因为可能会出现下面这种情况当出现这种情况的时候我们只看dp(i-1,j-1)是不对的为了引入动态规划,我们先写出递归的写法其实就是思路的直接表现递归写法递归的问题就是大量重复的调用下面是动态规划的写法动态规划待补充...

2021-03-21 17:24:12 157

原创 动态规划---入门Ⅲ

这题的状态定义倒是蛮好想的,和之前是差不多的状态转移方程里的遍历前面的dp来获取当前的dp就一时间没有想到最重要的思想是遍历出来之前的dp从而得到当前dp【i】

2021-03-12 17:02:06 64

原创 动态规划---入门Ⅱ

有后效性即前面怎么实现的对后面的实现是有影响的我们把i结尾的最大连续子序列和作为dp【i】

2021-03-11 11:01:03 87

原创 排序回顾---选择排序

选择排序其实就是逐步确定最后一位的数字,把前面最大的与最后一位进行交换。

2021-03-10 10:04:12 81

原创 动态规划---入门

根据这个思路写出来的代码(自顶向下的调用,出现大量重复)问题在于出现了大量的重复调用,效率很低比如这种情况就重复计算了两次coins{1}为了改善,出现了记忆化搜索记忆化搜索(自顶向下)其实上面还没完善,因为存在了安全问题,就比如说计算coins2(19),这时候的dp数组只有20,但是赋值赋到了25,应该这样修改前面都只是动态搜索的前提,下面的递推才是动态搜索的核心优化之所以可以去掉max_value和i》=1的判断,是因为我们的for循环开始就i=1了,所以再i》=1的判断里,

2021-03-08 22:31:46 73

原创 leetcode刷题---热门百题---回文链表

请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?这一题比较好弄的解法其实就是遍历链表然后将数据存到list里面,之后判断list里面的数据是不是回文就好/** * Definition for singly-linked list. * public class ListNode { * int val

2021-03-05 22:32:33 343

原创 leetcode刷题---热门百题---子集---dfs

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互不相同

2021-03-04 15:59:11 274 1

原创 排序回顾---快速排序

简述快速排序是一种排序执行效率很高的排序算法,它利用分治法来对待排序序列进行分治排序,它的思想主要是通过一趟排序将待排记录分隔成独立的两部分,其中的一部分比关键字小,后面一部分比关键字大,然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序,下面我们简单进行阐述。快排思路我们从一个数组来逐步逐步说明快速排序的方法和思路。思路假设我们对数组{7, 1, 3, 5, 13, 9, 3, 6, 11}进行快速排序。首先在这个序列中找一个数作为基准数,为了方便可以取第一个

2021-03-03 11:35:05 77

原创 leetcode刷题---求众数||---摩尔投票法

给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。示例 1:输入:[3,2,3]输出:[3]示例 2:输入:nums = [1]输出:[1]示例 3:输入:[1,1,1,3,3,2,2,2]输出:[1,2]提示:1 <= nums.length <= 5 * 104-109 <= nums[i] <= 109来源:力扣(LeetCode)链接:

2021-02-27 14:02:08 191

原创 leetcode刷题---热门百题---多数元素---摩尔投票法

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2这题我自己做的时候用的是哈希表来完成class Solution { public int majorityElement(int[] nums) { int len = nums.length; int min

2021-02-27 13:39:48 95

空空如也

空空如也

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

TA关注的人

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