![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
Star_.
这个作者很懒,什么都没留下…
展开
-
搜索旋转排序数组
元宵节快乐!整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …,nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums原创 2022-02-15 19:22:13 · 247 阅读 · 0 评论 -
最长有效括号
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。加强版括号匹配,所以都想的是利用栈来做,其实也能用dp来做方法一:利用栈:class Solution { public int longestValidParentheses(String s) { Stack<Integer> q = new Stack<Integer>(); int len = s.length(); in原创 2022-02-15 19:17:49 · 185 阅读 · 0 评论 -
下一个排列
整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的下一个排列就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。例如,arr = .原创 2022-02-14 13:04:38 · 63 阅读 · 0 评论 -
合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。输入: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 ] 将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6方法一:暴力解法之前做过两个链表的升序排列,这次是n个原创 2022-02-14 12:56:15 · 448 阅读 · 0 评论 -
括号生成(深搜)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输入:n = 3、输出:["((()))","(()())","(())()","()(())","()()()"]class Solution { static List<String> list = new ArrayList<String>(); public List<String> generateParenthesis(int n) {原创 2022-02-12 11:35:52 · 126 阅读 · 0 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。哈哈,复习递归和数据结构/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int v原创 2022-02-12 11:33:41 · 222 阅读 · 0 评论 -
删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。题不难,但是很一种递归的方法很巧妙首先,看下我又臭又长的代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(原创 2022-02-10 11:37:06 · 167 阅读 · 0 评论 -
正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。动态规划,用dp[i][j]表示s中前i个字符匹配p中前j个字符如果s[i] = p[j]或者是p[j] = ‘.’,这种是最简单的,dp[i][j] = dp[i-1][j-1];难的是当p[j] = * 时,这取决于p[j-1]的值,如果p[j-1]也匹配不上s[i],那么,*原创 2022-02-09 13:42:40 · 224 阅读 · 0 评论 -
电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)示例:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]利用队列,以示例为例,先将abc入队,然后取出队首元素a,依次加上def,变成ad,ae,af后依次入队,再取队首元素b,依次再入队,再取队首元素c,依次再入队.原创 2022-02-07 11:21:03 · 75 阅读 · 0 评论 -
力扣-三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。来源:力扣(LeetCode)双指针+排序,排序是为了排除重复的三元组,第一重循环数组遍历,然后利用双指针,一个指向这个数的后一位,一个指向最后,然后二分。中间有剪纸,如果这个数大于0,那么在二分时必然不会等于0,然后再用一个条件排除重复的情况class Solution { publi.原创 2022-02-06 19:53:22 · 638 阅读 · 0 评论 -
盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。二分题,但是我一开始没看出来,本身自己学的就不咋地。想的是双指针,然后条件while判断错啦,有的样例会错。吃一堑,长一智,现在基础题都看不出来啦代码:class Solution { public int maxArea(i原创 2022-02-04 11:28:24 · 719 阅读 · 0 评论 -
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。动态规划遍历时从列开始,举个例子,如果 a[0]与a[4]相同,就需要看1到3是否是回文串,列为1,所以以列先遍历,又因为子串中i一定小于j,所以遍历时i<j,因为j-1-(i+1)+1<2,j-i<3时即子串小于2时一定是回文的class Solution { public String longestPalindrome(String s) { if(s.length() < 2)原创 2022-02-03 20:42:15 · 569 阅读 · 0 评论 -
力扣-两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。注意val相加时大于等于10的情况/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode()原创 2022-02-03 15:27:02 · 69 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。好久没做算法题啦,试试手,有点熟悉的陌生人的味道这是一个窗口问题,如果一个字符与我们的子串有重复,就删除最左边一个,一次删除,如果没有,我们就在末尾加上这个字符class Solution {public: int lengthOfLongestSubstring(string s) { if(s=="") return 0; int j=0; int原创 2022-02-03 15:21:14 · 379 阅读 · 0 评论