leetcode_数据结构
木木生琳
这个作者很懒,什么都没留下…
展开
-
LeetCode_数据结构_最长回文串
最长回文串给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。示例 1:输入:s = “abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。示例 2:输入:s = “a”输入:1示例 3:输入:s = “bb”输入: 2(上述题目来源于LeetCode)解法一(哈希表)class Solution { publ原创 2022-03-13 23:51:07 · 792 阅读 · 0 评论 -
LeetCode_数据结构_字符串相加
字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。示例 1:输入:num1 = “11”, num2 = “123”输出:“134”示例 2:输入:num1 = “456”, num2 = “77”输出:“533”示例 3:输入:num1 = “0”, num2 = “0”输出:“0”(上述题目来源于LeetCode)解法原创 2022-03-13 23:48:37 · 192 阅读 · 0 评论 -
LeetCode_数据结构_和为k的子数组
和为k的子数组给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。示例 1:输入:nums = [1,1,1], k = 2输出:2(上述题目来源于LeetCode)解法一(暴力解法1)class Solution { public int subarraySum(int[] nums, int k) { //暴力解法 int count = 0; int n = nums.length;原创 2022-03-13 19:48:30 · 643 阅读 · 0 评论 -
LeetCode_数据结构_除自身以外数组的乘积
除自身以外数组的乘积给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。示例 1:输入: nums = [1,2,3,4]输出: [24,12,8,6]示例 2:输入: nums = [-1,1,0,-3,3]输出: [0,0,9,0,0](上述题原创 2022-03-13 19:11:49 · 252 阅读 · 0 评论 -
LeetCode_数据结构_递增的三元子序列
递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:fal原创 2022-03-13 18:57:31 · 1449 阅读 · 0 评论 -
LeetCode_数据结构_无重叠区间
无重叠区间给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。示例 1:输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: intervals = [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:原创 2022-03-13 18:48:25 · 877 阅读 · 0 评论 -
LeetCode_数据结构_搜索二维矩阵II
搜索二维矩阵II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入: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示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19原创 2022-03-13 18:42:38 · 734 阅读 · 0 评论 -
LeetCode_数据结构_螺旋矩阵
螺旋矩阵给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]](上述题目来源于LeetCode)解法class Solution { public int[][] generateMatrix(int n) { //用边界来限制元素按顺时针排列 int原创 2022-03-13 18:38:50 · 495 阅读 · 0 评论 -
LeetCode_数据结构_旋转图像
旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,原创 2022-03-08 15:31:30 · 62 阅读 · 0 评论 -
LeetCode_数据结构_设计哈希映射
###设计哈希映射不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key) 如果原创 2022-03-08 15:25:47 · 342 阅读 · 0 评论 -
LeetCode_数据结构_合并区间
合并区间以数组 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]原创 2022-03-07 16:49:22 · 391 阅读 · 0 评论 -
LeetCode_数据结构_杨辉三角Ⅱ
杨辉三角II给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: rowIndex = 3输出: [1,3,3,1]示例 2:输入: rowIndex = 0输出: [1]示例 3:输入: rowIndex = 1输出: [1,1](上述题目来源于LeetCode)解法class Solution { public List<Integer> getRow(int原创 2022-03-07 16:33:17 · 242 阅读 · 0 评论 -
LeetCode_数据结构_颜色分类
颜色分类给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2](上述题目来源于LeetCode)解法一(冒泡排序)class Solution原创 2022-02-28 16:03:40 · 204 阅读 · 0 评论 -
LeetCode_数据结构_三数之和
三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[](上述题目来源于LeetCode)解法一class Solution {原创 2022-02-28 15:38:49 · 74 阅读 · 0 评论 -
LeetCode_数据结构_多数元素
多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2(上述题目来源于LeetCode)解法一(哈希表)class Solution { public int majorityElement(int[] nums) { //运用哈希表,将数组中每一个数字以原创 2022-02-25 17:09:55 · 50 阅读 · 0 评论 -
LeetCode_数据结构_只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4(上述题目来源于LeetCode)解法一(哈希表)class Solution { public int singleNumber(int[] nums) { //将数组中的数据放到哈希表中,通过key找value,如果value等于1,则符合题目要求原创 2022-02-25 16:46:57 · 487 阅读 · 0 评论 -
LeetCode_数据结构入门_有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true(上述题目来源于LeetCode原创 2022-01-29 22:45:48 · 564 阅读 · 0 评论 -
LeetCode_数据结构入门_删除排序链表中的重复元素
删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3](上述题目来源于LeetCode)解法(一次循环):/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2022-01-27 19:27:01 · 291 阅读 · 0 评论 -
LeetCode_数据结构入门_反转链表
反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[](上述题目来源与LeetCode)解法(递归反转链表):/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2022-01-27 16:49:06 · 371 阅读 · 0 评论 -
LeetCode_数据结构入门_移除链表元素
移除链表元素给你一个链表的头节点 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输出:[](上述题目来源于LeetCode)解法/** * Definition for sin原创 2021-12-12 21:38:12 · 46 阅读 · 0 评论 -
LeetCode_数据结构入门_合并两个有序链表
合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0](上述题目来源于LeetCode)解法(递归的方法,需要哨兵节点和一个指针)/** * Definition for singly-linked li原创 2021-12-12 19:53:30 · 51 阅读 · 0 评论 -
LeetCode_数据结构入门_环形链表
环形链表给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:原创 2021-12-12 19:44:24 · 83 阅读 · 0 评论 -
LeetCode_数据结构入门_有效的字母异位词
有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false(上述题目来源于LeetCode)解法一(使用标记数组)class Solution { public boolean isAnagra原创 2021-12-12 17:30:30 · 166 阅读 · 0 评论 -
LeetCode_数据结构入门_赎金信
赎金信给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。示例 1:输入:ransomNote = “a”, magazine = “b”输出:false示例 2:输入:ransomNote = “aa”, magazine = “ab”输出:false示例 3:输入:ransomN原创 2021-12-12 17:22:09 · 165 阅读 · 0 评论 -
LeetCode_数据结构入门_字符串中的第一个唯一字符
字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2(上述题目来源于LeetCode)解法一class Solution { public int firstUniqChar(String s) { //将字符串转换为数组 char s1[] = s.toCharArray(); //定义一个原创 2021-12-12 17:16:45 · 791 阅读 · 0 评论 -
LeetCode_数据结构入门_矩阵置零
矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]](上述题目来源于LeetCode)首先,什么是原地算法呢?百度的原创 2021-12-12 16:55:27 · 201 阅读 · 0 评论 -
LeetCode_数据结构入门_有效的数独
有效的数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用 ‘.’ 表示。示例 1:输入:board =[[“5”,“3”,".",".",“7”,".",".",".","原创 2021-12-04 19:17:52 · 136 阅读 · 0 评论 -
LeetCode_数据结构入门_杨辉三角
杨辉三角给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]](上述题目来源于LeetCode)解法:class Solution { public List<List<Integer>> ge原创 2021-12-04 18:54:01 · 757 阅读 · 0 评论 -
LeetCode_数据结构入门_重塑矩阵
重塑矩阵在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例 1:输入:mat = [[1,2],[3,4]]原创 2021-12-04 17:35:37 · 78 阅读 · 0 评论 -
LeetCode_数据结构入门_买卖股票的时机
买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意原创 2021-12-02 21:00:22 · 60 阅读 · 0 评论 -
LeetCode_数据结构入门_两个数组的交集
两个数组的交集给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]解法:class Solution { public int原创 2021-12-02 15:41:26 · 129 阅读 · 0 评论 -
LeetCode_数据结构入门_合并两个有序数组
合并两个有序数组给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:nums1 =原创 2021-12-02 11:39:12 · 82 阅读 · 0 评论 -
LeetCode_数据结构入门_两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targe原创 2021-12-02 11:17:23 · 60 阅读 · 0 评论 -
LeetCode_数据结构入门_最大子序和
最大子序和给定一个整数数组 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动态规划法:c原创 2021-11-30 17:37:48 · 126 阅读 · 0 评论 -
leetcode-数据结构入门-存在重复元素
存在重复元素给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true1.解法一class Solution { public boolean containsDuplicate(int[] nums) {原创 2021-11-30 17:21:29 · 143 阅读 · 0 评论