LeetCode Hot100
qq_34774972
这个作者很懒,什么都没留下…
展开
-
31. 下一个排列
31. 下一个排列 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须 原地 修改,只允许使用额外常数空间。 字典顺序 [1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1] [1,2,3] 思路:1.先理解题意 读懂题 2.找到第一个顺序对 即较小的数 a[i] 3.再找到较大的数 a[j] 交换i j 4.直接将翻转[i,n] class Solu原创 2020-12-29 10:37:26 · 64 阅读 · 0 评论 -
22. 括号生成
22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 思路: 1.暴力法:排列组合将所有的情况列出,判断出有效的括号组合 2.回溯法:添加右括号要满足两个条件 插入数量不超过n 可以插入 )右括号 的前提是 (左括号 的数量大于 )右括号 class Solution { public List<String> generateParenthesis(int n) { //括号组合 List<原创 2020-12-21 17:29:03 · 52 阅读 · 0 评论 -
21. 合并两个有序链表
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路:递归实现,新链表也不需要构造新节点,终止条件:两条链表分别名为 l1 和 l2,当 l1 为空或 l2 为空时结束,返回值:每一层调用都返回排序好的链表头,如果 l1 的 val 值更小,则将 l1.next 与排序好的链表头相接,l2 同理。 /** * Definition for singly-linked list. * public class ListNode {原创 2020-12-21 08:50:41 · 54 阅读 · 0 评论 -
20. 有效的括号
20. 有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串 思路:使用栈 判断括号的有效性可以使用「栈」这一数据结构来解决。 我们对给定的字符串 ss 进行遍历,当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。 当我们遇到一个右括号时,我们原创 2020-12-19 11:51:38 · 62 阅读 · 1 评论 -
19. 删除链表的倒数第N个节点
19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 整体思路是让前面的指针先移动n步,之后前后指针共同移动直到前面的指针到尾部为止 代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.va原创 2020-12-19 11:04:01 · 67 阅读 · 1 评论 -
11. 盛最多水的容器
11. 盛最多水的容器 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 思路:双指针 左右移动 容纳的水量 = 两个原创 2020-12-16 17:21:58 · 81 阅读 · 0 评论 -
6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入: s = “LEET原创 2020-12-16 16:59:53 · 44 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 思路:已知数组的长度 使用双指针O(m+n) class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { // 两数组总长 int len = nums1.length原创 2020-12-09 11:33:16 · 41 阅读 · 0 评论 -
15.三数之和
15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 两种思路: 1.暴力方法(三重循环): class Solution { public List<List<Integer>> threeSum(int[] nums) { int n = nums.length; Set原创 2020-12-01 20:23:13 · 57 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 解决思路:滑动窗口 用到的数据结构:HashMap 判断是否存在 key为字符 value为字符位置+1 (表示从后面一位不重复) class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length();原创 2020-11-23 11:02:43 · 44 阅读 · 0 评论