随笔分类 -  数据结构与算法

摘要:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须 原地 修改,只允许使用额外常数空间。 示例 1: 输入:nums = [1,2,3] 输出:[1,3,2] 解析: 两遍扫描 从后 阅读全文
posted @ 2021-03-22 22:56 Vincent-yuan 阅读(50) 评论(0) 推荐(0) 编辑
摘要:给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。 示例 1: 输入: s = "barfoothefoobarm 阅读全文
posted @ 2021-03-22 21:53 Vincent-yuan 阅读(79) 评论(0) 推荐(0) 编辑
摘要:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 trun 阅读全文
posted @ 2021-03-10 22:25 Vincent-yuan 阅读(354) 评论(0) 推荐(0) 编辑
摘要:实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串, 在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。 如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll 阅读全文
posted @ 2021-03-09 23:00 Vincent-yuan 阅读(72) 评论(0) 推荐(0) 编辑
摘要:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 输入:nums = [3, 阅读全文
posted @ 2021-03-09 22:32 Vincent-yuan 阅读(92) 评论(0) 推荐(0) 编辑
摘要:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nu 阅读全文
posted @ 2021-03-09 22:13 Vincent-yuan 阅读(58) 评论(0) 推荐(0) 编辑
摘要:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点 阅读全文
posted @ 2021-03-08 22:21 Vincent-yuan 阅读(375) 评论(0) 推荐(0) 编辑
摘要:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 解析: 方法一:递归 public class leetcode24 { public static 阅读全文
posted @ 2021-03-08 21:44 Vincent-yuan 阅读(96) 评论(0) 推荐(0) 编辑
摘要:给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例1: 输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并 阅读全文
posted @ 2021-03-03 22:44 Vincent-yuan 阅读(104) 评论(0) 推荐(0) 编辑
摘要:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"] 解析: 方法一:暴力破解 递归 为了生成所有序列,我们可以使用递归。长度为  阅读全文
posted @ 2021-03-03 08:07 Vincent-yuan 阅读(129) 评论(0) 推荐(0) 编辑
摘要:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 解析: 方法一:递归 也就是说,两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合 阅读全文
posted @ 2021-02-25 22:50 Vincent-yuan 阅读(73) 评论(0) 推荐(0) 编辑
摘要:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 解析: 对链表操作时,一种常用的技巧:添加一个哑节点,使它的next指向链表的头结点。 这样,就不需要 阅读全文
posted @ 2021-02-25 22:10 Vincent-yuan 阅读(97) 评论(0) 推荐(0) 编辑
摘要:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。 示例1: 输入:s = "()[]{}" 输出:true 示例2: 输入:s = "([)]" 输出:false 阅读全文
posted @ 2021-02-23 22:49 Vincent-yuan 阅读(102) 评论(0) 推荐(0) 编辑
摘要:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [ 阅读全文
posted @ 2021-02-22 22:31 Vincent-yuan 阅读(173) 评论(0) 推荐(0) 编辑
摘要:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce" 阅读全文
posted @ 2021-02-19 22:31 Vincent-yuan 阅读(338) 评论(0) 推荐(0) 编辑
摘要:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近 阅读全文
posted @ 2021-02-18 22:40 Vincent-yuan 阅读(167) 评论(0) 推荐(0) 编辑
摘要:题目 给你一个包含 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]] 分析: 不 阅读全文
posted @ 2021-01-28 23:49 Vincent-yuan 阅读(143) 评论(0) 推荐(0) 编辑
摘要:题目 static int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; static String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV", 阅读全文
posted @ 2021-01-25 23:20 Vincent-yuan 阅读(89) 评论(0) 推荐(0) 编辑
摘要:题目 罗马数字的表示 7 + 6共13种。 关系如下: int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX 阅读全文
posted @ 2021-01-25 22:15 Vincent-yuan 阅读(121) 评论(0) 推荐(0) 编辑
摘要:题目地址 题目大意: 给一个数组的高度a1,a2,...,an, 垂直线 i 的两个端点 (i, 0)和(i, ai), 然后找出其中的两条线,使它们与 x轴 共同构成容器,可以容纳最多的水。 如图一 题目分析: 计算容器盛水: s(i, j )= ( j-i ) min( h[i] , h[j] 阅读全文
posted @ 2021-01-24 22:31 Vincent-yuan 阅读(182) 评论(0) 推荐(0) 编辑