自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode——第 72 场双周赛—4

原题链接:5999. 统计数组中好三元组数目给你两个下标从 0 开始且长度为 n 的整数数组 nums1 和 nums2 ,两者都是 [0, 1, …, n - 1] 的 排列 。好三元组 指的是 3 个 互不相同 的值,且它们在数组 nums1 和 nums2 中出现顺序保持一致。换句话说,如果我们将 pos1vpos1_vpos1v​ 记为值 v 在 nums1 中出现的位置,pos2vpos2_vpos2v​ 为值 v 在 nums2 中的位置,那么一个好三元组定义为 0 <= x, y,

2022-02-20 16:56:00 370

原创 剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000方法一:class Solution { public String replaceSpace(String s) { char[] sToChars = s.toCharArray(); StringB

2021-09-12 21:34:19 129

原创 剑指 Offer 04. 二维数组中的查找

剑指 Offer 04. 二维数组中的查找在一个 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]]给定 t

2021-09-12 21:23:35 158

原创 剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000方法一:class Solution { public int findRepeatNumber(int[

2021-09-12 21:02:44 123

原创 Leetcode - 每日一题(773. 滑动谜题)

在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。示例:输入:board = [[1,2,3],[4,0,5]]输出:1解释:交换 0 和 5 ,1 步完成输入:board = [[1,2,3]

2021-06-26 14:25:46 80

原创 Leetcode - 每日一题(752. 打开转盘锁)

原题链接你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的

2021-06-25 21:24:29 87

原创 Leetcode - 每日一题(191. 位1的个数)

原题链接编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:0000000000000

2021-06-23 10:47:32 76

原创 leetcode——第246场周赛—1

原题链接给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。子字符串 是字符串中的一个连续的字符序列。示例 1:输入:num = “52”输出:“5”解释:非空子字符串仅有 “5”、“2” 和 “52” 。“5” 是其中唯一的奇数。示例 2:输入:num = “4206”输出:""解释:在 “4206” 中不存在奇数。示例 3:输入:num = “35427”输

2021-06-21 15:15:43 309

原创 Leetcode - 每日一题(401. 二进制手表)

原题链接二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,下面的二进制手表读取 “3:25” 。给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。小时不会以零开头:例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。分钟必须由两位数组成,可能会以零开头:例如,“10:2” 是无效的

2021-06-21 14:21:50 149

原创 Leetcode - 每日一题(零钱兑换 II)

原题链接给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins = [1

2021-06-10 20:19:47 229

原创 leetcode(64. 最小路径和)

原题链接给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入: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题解:简单dp,今天dp都做麻了代码:class Solution { public int minP

2021-06-08 23:48:31 185 3

原创 leetcode(63. 不同路径 II)

原题链接一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同

2021-06-08 23:27:03 103 1

原创 leetcode(62. 不同路径)

原题链接一个机器人位于一个 MxNM x NMxN 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下

2021-06-08 22:05:45 83

原创 leetcode(53. 最大子序和)

原题链接给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000

2021-06-08 21:30:55 49 1

原创 Leetcode - 每日一题(1049. 最后一块石头的重量 II)

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

2021-06-08 20:24:59 190

原创 Leetcode - 每日一题(494. 目标和)

原题链接给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为

2021-06-08 15:20:53 267

原创 leetcode——第244场周赛—3

给你一个二进制字符串 s 。你可以按任意顺序执行以下两种操作任意次:类型 1 :删除 字符串 s 的第一个字符并将它 添加 到字符串结尾。类型 2 :选择 字符串 s 中任意一个字符并将该字符 反转 ,也就是如果值为 ‘0’ ,则反转得到 ‘1’ ,反之亦然。请你返回使 s 变成 交替 字符串的前提下, 类型 2 的 最少 操作次数 。我们称一个字符串是 交替 的,需要满足任意相邻字符都不同。比方说,字符串 “010” 和 “1010” 都是交替的,但是字符串 “0100” 不是。示例 1:

2021-06-07 21:51:47 201

原创 leetcode——第244场周赛—2

原题链接给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤:找出 nums 中的 最大 值。记这个值为 largest 并取其下标 i (下标从 0 开始计数)。如果有多个元素都是最大值,则取最小的 i 。找出 nums 中的 下一个最大 值,这个值 严格小于 largest ,记为 nextLargest 。将 nums[i] 减少到 nextLargest 。返回使 nums 中的所有元素相等的操作次数。示例 1:输入:nums

2021-06-07 17:23:14 128

原创 leetcode——第244场周赛—1

原题链接给你两个大小为 NNN x NNN 的二进制矩阵 mat 和 target 。现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 target 一致,返回 true ;否则,返回 false 。示例 1:输入:mat = [[0,1],[1,0]], target = [[1,0],[0,1]]输出:true解释:顺时针轮转 90 度一次可以使 mat 和 target 一致。示例 2:输入:mat = [[0,1],[1,1]], target

2021-06-07 16:57:10 131

原创 leetcode(5. 最长回文子串)

原题链接给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”由于这次力扣周赛被打蒙了。只写出来两个题,感觉得补一下动态规划题目了,先刷它个20道再说。题解:我们用 P(i,j)P(i,j)P(i,j)表示字符串 sss 的第 iii 到

2021-06-06 22:41:37 162 2

原创 Leetcode - 每日一题(474. 一和零)

原题链接今天的每日抑题有那么亿点点难,看了半天知道是个动态规划但是没啥头绪(看来大一学的算法全部扔回去了)。之后看了[三叶大佬](https://leetcode-cn.com/u/ac_oier/)的题解才明白算法,所以三叶大佬yyds。思路:已知该题是一个动态规划题,类似于背包问题,只不过这里重物的重量不再是一个维度而是两个维度,价值也恒等于一。由于每个字符串只能被选择一次,因此该题是个01背包问题的变形。因此那我们可以直接套用 01 背包的「状态定义」来做:$f[k][i][j]$ 代表

2021-06-06 21:12:51 109

原创 Leetcode - 每日一题(160.相交链表)

原题链接给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘

2021-06-06 00:32:04 174

原创 Leetcode - 每日一题(203.移除链表元素)

原题链接给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]题解:简单题,没啥好说的,写就完事。迭代法class Solution {

2021-06-05 21:41:00 141

原创 Leetcode - 每日一题(525. 连续数组)

原题链接给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。思路:该题很显然可以看出是前缀和的思路。我们依次读取数组中的每个元素,并得到其前缀和。当元素为空时,前缀和为0,此时我们

2021-06-03 22:16:09 145

原创 Leetcode - 每日一题(324.4的幂)

原题链接给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n=4xn = 4^xn=4x。题解:对于这题我们可以采用位运算的思路。任取一个数,假如该数是 4 的 n 幂次方,则转换成二进制表示形式可知,必定为 1,100,10000等形式,即第 2*n+1 位 为 1,其余位均为0。代码如下class Solution { public boolean isPowerOfFour

2021-05-31 09:28:47 101

原创 nowcoder-剑指offer-13-调整数组顺序使奇数位于偶数前面

原题链接由题意可知,我们新建一个数组,随后遍历传入的数组,将奇数依次复制到新建的数组中,再遍历一次,将偶数依次复制到新建的数组中,最后将新建的数组的元素依次复制到传入的数组中即可。import java.util.Arrays;public class Solution { public void reOrderArray(int [] array) { int[] answer=new int[array.length]; int index=0;

2021-05-31 08:59:11 63

原创 leetcode(4.寻找两个正序数组的中位数)

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。简单思路:合并数组,并找到中位数即可,时间复杂度为O(m+n)class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int[] allNums = new int[nums1.length+ nums2.length]; int i

2021-05-15 11:45:36 60

原创 leetcode(3.无重复字符的最大字串)

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。题解:该题我们可以使用滑动窗口去解决。定义一个 map 数据结构存储 (k, v),其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复,我们定义不重复子串的开始位置为 start,结束位置为 end,随着 end 不断遍历向后,会遇到与 [start, end] 区间内字符相同的情况,此时将字符作为 key 值,获取其 value 值,并更新 start,此时 [start, end] 区间内不

2021-05-15 10:43:58 126

原创 leetcode(2. 两数相加)

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。题解:建立一个新的链表,存储(l1.val+l2.val)%10,并设立一个isAdd标志位,判断是否需要进位即可。代码:class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2)

2021-05-06 15:29:44 50

原创 leetcode(1. 两数之和)

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。题解:对于该整数数组,我们可以用hashmap存储,key值表示 target-nums[i] ,value表示 i 。然后依次遍历数组,如果hashmap中的key值包括该数组元素,则返回key对应的value与该数组元素下标即可。代码:class Solut

2021-05-06 15:00:36 39

原创 Leetcode - 每日一题(1720. 解码异或后的数组)

原题链接未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。对于该题目,我们首先应当知晓异或运算的性质。对于一个数 A

2021-05-06 14:46:06 130

原创 修改PvZ游戏数据文件

这是CSDN第一次学习任务,要求是修改植物大战僵尸游戏数据查看并修改dat文件(16进制文件),我们用的是VsCode,下载Hex Editor插件即可。首先打开 系统盘:\ProgramData\PopCap Games\PlantsVsZombies\userdata目录,可以发现有一个user1.dat,里面存储的即是用户数据。接着,我们试玩游戏,可以发现00000000 04开始的数据即为关卡数据,00000000 08 开始的数据,即为金币数据,且数据的存储均为反向存储,则我们修改文件数

2021-04-11 21:21:00 3506 1

原创 二叉查找树

自己写的一个二叉查找树,对于该树每一个节点,以该节点为根节点的子树的左侧节点均小于根节点,右侧节点均大于根节点。package Tree.BinarySearchTree;import java.nio.BufferUnderflowException;/** * @author DearAhri520 * * 二叉查找树*/public class BinarySearchTree<T extends Comparable<? super T>> { /

2021-04-06 21:47:40 53

原创 leetcode——第233场周赛—3

原题链接给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数):nums.length == nnums[i] 是 正整数 ,其中 0 <= i < nabs(nums[i] - nums[i+1]) <= 1 ,其中 0 <= i < n-1nums 中所有元素之和不超过 maxSumnums[index] 的值被 最大化返回你所构造的数组中的 nums[index] 。注意:ab

2021-03-30 21:31:50 116

原创 leetcode——第233场周赛—2

原题链接给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。订单类型 orderTypei 可以分为两种:0:表示这是一批采购订单 buy1:表示这是一批销售订单 sell注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i ,由 orders[i] 表示的所有订单提交时

2021-03-29 21:52:58 135

原创 leetcode——第233场周赛—1

原题链接给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。子数组是数组中的一个连续数字序列。已知子数组 [numsl, numsl+1, …, numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。题解:由于是子数组而不是子序列,所以该题很简单,直接上代码就行。class Solution {

2021-03-29 20:10:20 137

原创 leetcode——第232场周赛—4

原题链接给你一个整数数组 nums (下标从 0 开始)和一个整数 k 。一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], …, nums[j]) * (j - i + 1) 。一个 好 子数组的两个端点下标需要满足 i <= k <= j 。请你返回 好 子数组的最大可能 分数 。由题意可知,左边界<=k<=右边界,则我们可以从下标k开始,逐渐向左右边界扩展,找到最大值。若min(nums[i],nums[i+1],...,num

2021-03-18 21:15:12 124

原创 leetcode——第232场周赛—3

原题链接一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。给你一个整数 extraStudents ,表示额外有 extraStudents 个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这 extraStudents 个学生每人都安排一个班级,使得 所有 班级的

2021-03-18 00:06:39 141 2

原创 leetcode——第232场周赛—2

原题链接有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。对于题意我们可知,有一个中心节点,该节点连接其他所有节点,则必定连接第一个节点与第二个节点,所以我们只用考虑edges[0]与edges[1]即可。class Sol

2021-03-17 21:48:22 93

原创 leetcode——第232场周赛—1

原题链接给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false。代码如下:class Solution { public boolean areAlmostEqual(String s1, String s2) { int cnt=0; int[] ind

2021-03-17 21:37:27 77

空空如也

空空如也

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

TA关注的人

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