分类目录归档:leetcode

【置顶】leetcode 题目分类对照表


分类

数组

1. 两数之和
66. 加一
11. 盛最多水的容器
283. 移动零
70. 爬楼梯
746. 使用最小花费爬楼梯
15. 三数之和(高频老题)
18. 四数之和
16. 最接近的三数之和
125. 验证回文串
238. 除自身以外数组的乘积
189. 旋转数组
88. 合并两个有序数组
26. 删除排序数组中的重复项

链表

206. 单链表反转
141. 链表中环的检测
142. 环形链表 II
234. 回文链表
19. 删除链表倒数第 n 个结点
21. 两个有序的链表合并
23. 合并K个排序链表
876. 求链表的中间结点
24. 两两交换链表中的节点
25. K 个

Read more

354. 俄罗斯套娃信封问题


题目地址

给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。

当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。

注意:不允许旋转信封。

  示例 1:

输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出:3
解释:最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

示例 2:

输入:env

Read more

309.best-time-to-buy-and-sell-stock-with-cooldown


309. 最佳买卖股票时机含冷冻期

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

示例:

输入: [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

Read more

151.reverse-words-in-a-string


151. 翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

 

示例 1:

输入: "the sky is blue"
输出: "blue is sky the"

示例 2:

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
``` 

说明:


- 无空格字符构成一个单词。
- 输入字符串可

Read more

215.kth-largest-element-in-an-array


215. 数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

解法一

时间复杂度:快排 O(nlogn) 空间复杂度: O(1)

class Solution {
    public int findKthLargest(int[] nums, int k) {
 

Read more

493.reverse-pairs


493. 翻转对

给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。

你需要返回给定数组中的重要翻转对的数量。

示例 1:

输入: [1,3,2,3,1]
输出: 2

示例 2:

输入: [2,4,3,5,1]
输出: 3

注意:

给定数组的长度不会超过50000。
输入数组中的所有数字都在32位整数的表示范围内。

思路

  1. 暴力法:两个嵌套循环 O(n^2)
  2. merge-sort
  3. 树状数组

解法一

树状数组


解法二

归并排序

class Solution {
    public int hel

Read more

415.add-strings


415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

 

提示:

  • num1 和num2 的长度都小于 5100
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零
  • 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

解法一

class Solution {
    public String addStrings(String num1, String num2) {

        int carry = 0;

        int i = num1.length() - 1

Read more

438.find-all-anagrams-in-a-string


438. 找到字符串中所有字母异位词

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。

说明:

字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。

示例 1:

输入:
s: "cbaebabacd" p: "abc"

输出:
[0, 6]

解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。

示例 2:

输入:
s: "abab"

Read more