作者文章归档:wangxiuwen

238. 除自身以外数组的乘积


官方链接

https://leetcode-cn.com/problems/product-of-array-except-self/

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

输入: [1,2,3,4]
输出: [24,12,8,6]

提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。

说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

进阶: 你可以在常数空间复杂度内完成这个题

Read more

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