Leetcode
文章平均质量分 53
阿德罗斯
记录学习和生活
展开
-
【leetcode】背包问题 5/6
1049 最后一块石头的重量II思路:将整个数组中的数分为两部分,并且让其尽量相等,就可以达到最后一块石头最小的目的。由此,可以将该问题转换为一个背包问题,背包容量为 sum/2,在这个容量下拿到最大体积的石头。定义 dp 数组dp[i] 表示 i 容量下可以容纳石头的最大重量。递推公式dp[i] = Math.max(dp[i], dp[i-stones[j]]+stones[j]);初始化全部初始化为 0 即可遍历顺序当使用一维 dp 时,外层是物品,内层是容量,并且内层是倒序遍历。原创 2022-05-06 23:24:29 · 167 阅读 · 0 评论 -
Leetcode 栈的简单应用
Leetcode 20 有效的括号题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}原创 2021-05-12 15:18:35 · 159 阅读 · 0 评论 -
Leetcode 349 两个数组的交集
题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]分析和实现对于这个问题,要求的结果是两个数组的交集,也就是两者都有的元素。那么,很自然的思路就是对两个数组进行统计,然后查看两者之间的相同元素。Map + Set在具体实现时,我用 map 对第一个数组进行统计,用 set 来保存两个原创 2021-05-10 15:44:15 · 101 阅读 · 0 评论 -
Leetcode 1207独一无二的出现次数
问题描述给你一个整数数组 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提示:原创 2021-05-10 00:28:35 · 104 阅读 · 0 评论 -
Leetcode 242 有效的字母异位词
问题描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?分析和实现统计法可以使用额外的空间进行字符串的统计,对于第一个字符串,统计各个字符出现的次数;对于第二个原创 2021-05-09 23:58:33 · 134 阅读 · 1 评论 -
Leetcode 13 罗马数字转整数
问题描述罗马数字包含以下七种字符: 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原创 2021-05-01 11:39:08 · 67 阅读 · 0 评论 -
剑指 offer 58-II 左旋转字符串
问题描述字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”限制:1 <= k < s.length <= 10000分析和实现这原创 2021-04-30 15:00:09 · 159 阅读 · 1 评论 -
Leetcode 344 反转字符串
题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”原创 2021-04-30 10:25:17 · 77 阅读 · 0 评论 -
剑指offer 05 替换空格
问题描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”分析和实现暴力实现最容易想到的就是遍历并且进行字符串拼接,具体代码如下:class Solution { public String replaceSpace(String s) { String result = ""; int length = s.length();原创 2021-04-28 22:00:32 · 60 阅读 · 0 评论 -
Leetcode 54 螺旋矩阵
Leetcode 数组系列:leetcode 1 两数之和leetcode 59 螺旋矩阵 IIleetcode 66 加一剑指offer3 数组中重复的数字leetcode 75 颜色分类Leetcode 54 螺旋矩阵问题描述给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:m原创 2021-04-24 17:11:07 · 97 阅读 · 0 评论 -
Leetcode 75 颜色分类
Leetcode 数组系列:leetcode 1 两数之和leetcode 59 螺旋矩阵 IIleetcode 66 加一剑指offer3 数组中重复的数字leetcode 75 颜色分类问题描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]原创 2021-04-24 16:31:36 · 87 阅读 · 0 评论 -
Leetcode 剑指offer3 数组中重复的数字
题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3分析和实现暴力解法对于这个问题,直观的感受,就是直接 for 循环搜索,然后使用一个 Map 进行记录,如果已经在记录中存在,说明已经重复,返回该值,反之,继续循环。代码如下class Soluti原创 2021-04-24 13:17:51 · 122 阅读 · 0 评论 -
Leetcode 66 加一
题目描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]提示:1原创 2021-04-23 21:15:36 · 80 阅读 · 0 评论 -
Leetcode 59 螺旋数组 2
题目描述给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]解法对于这个问题,我们可以使用模拟的方法,按照图中的顺时针顺序进行填充。**在这个问题中,对于每一层的填充,我们可以分解为四个步骤:从左到右,从上到下,从右到左,从下到上。**代码如下:class Solution {原创 2021-04-21 15:55:52 · 83 阅读 · 0 评论 -
Leetcode 1两数之和
问题描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6原创 2021-04-21 10:49:33 · 74 阅读 · 0 评论 -
Leetcode 38 外观数组
题目描述题目分析和实现根据题目可知,我们可以得到如下几点:当 n == 1 时,返回 “1”对于第 n 个输出,它只与它的前一项有关对于第 n 个输出,它表示对前一项的描述所以对于要写出来的程序,特点如下:主体是一个循环,在循环中生成对上一次的描述描述函数中,主要是对上一个字符串的分割和计数实现如下:class Solution { public String countAndSay(int n) { String s = "1"; f原创 2021-04-20 14:58:23 · 90 阅读 · 0 评论