分类目录归档:算法

125. 验证回文串


官方地址

https://leetcode-cn.com/problems/valid-palindrome/

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解法一 自顶向下

class Solution {
    public boolean isPalindrome(String s) {

        s = filterNonN

Read more

15. 三数之和


官方地址

https://leetcode-cn.com/problems/3sum/

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

解法一 暴力求解

三重循环 O(n^3)

解法二 hash 表

记录 a, b, a + b = -c O(n^2)

解法三 左右下标推进

Read more

746. 使用最小花费爬楼梯


官方链接

https://leetcode-cn.com/problems/min-cost-climbing-stairs/

数组的每个索引作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i] (索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。

示例 1:

输入: cost = [10, 15, 20]
输出: 15
解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。

示例 2:

输入: 

Read more

70. 爬楼梯


官方链接

https://leetcode-cn.com/problems/climbing-stairs

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

思路

单词:

Elevator 电梯
Escalator 扶

Read more

283. 移动零


官方链接

https://leetcode-cn.com/problems/move-zeroes/

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

思路

  1. loop count zeros
  2. 开新数组 loop, 零往新数组的后面放,非零往新数组的前面放-->不满足题意
  3. 直接在内存中 index

解法一

class Solution {
    public void moveZeroes(in

Read more

11. 盛最多水的容器


官方链接

https://leetcode-cn.com/problems/container-with-most-water/

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例:

输入: [1,8,6,2,5,4

Read more

刷题方法


一般方法

记忆细节,反复练习
打破惯性,机器思维

练习重点

分治、回溯、递归、动态规划

核心思维

升维
空间换时间

刷题技巧

outliers

  • Chunk it up 切碎知识点
  • Deiliberate practicing 刻意练习
过遍数(五) 
刷题第一遍 5~15分钟思考
直接看解法,多解法的比较解法优劣
刷题第四遍/第五遍 的时候一定要上英文站 discuss board 中 查看 Most Votes 中最高票的前三个回答
练习缺陷,弱点的地方  
不舒服,不爽,枯燥  
生活中的例子: 乒乓球,台球,玩游戏等
  • Feed back 获得反馈

    主动型反馈 (自己去找)

Read more

资源推荐


附件

https://github.com/wangxiuwen/data_structures_and_algorithms.git

labuladong

labuladong
labuladong 的整理

花花酱

花花酱 YouTube
花花酱LeetCode B
花花酱代码
花花酱题目分类

Back To Back SWE

Back To Back SWE

绵羊教授

绵羊教授

小Q刷题

nat8023

公瑾

个人主页 源码

王争

王争的 数据结构和算法必知必会的50个代码实现

参考资料

数据结构和算法动态可视化

算法数据结构脑图

数据结构脑图
算法脑图

练习网站

learnGitBran

Read more

字符串


字符串

两个字符串变换问题,一般要转成一个二维数组,两个字符串分别为字符串的行和列

定义及常见操作

string immutable

python:

x = 'abbc'
for ch in x: 
    print(ch)

Java:

String x = "abbc";
String y = "abbc";

for (int i = 0; i < x.length(); ++i) {
    char ch = x.charAt(i);
}
for (char ch : x.toCharArray()) {
    Sys

Read more