分类标签归档:leetcode

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

时间与空间复杂度


时间与空间复杂度

复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系
和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点
复杂度量级,我们可以粗略地分为两类,多项式量级非多项式量级。其中,非多项式量级只有两个:O(2n)和O(n!)
我们把时间复杂度为非多项式量级的算法问题叫作NP(Non-Deterministic Polynomial,非确定多项式)问题
当数据规模n越来越大时,非多项式量级算法的执行时间会急剧增加,求解问题的执行时间会无限增长。所以,非多项式时间复杂度的算法其实是非常低效的算法

Big O notation(大O表示法)

Read more

算法数据结构


学习重点

需要掌握常见的10个数据结构与10个算法:

10个数据结构:

数组(Array)、链表(LinkedList)、栈(Stack)、队列(Queue, 优先队列 PriorityQueue)、散列表(HashTable)、二叉树(tree/Binary Search Tree)、堆、跳表、图(graph)、Trie树;

10个算法:

递归(Recursion)、排序、二分查找、搜索(BST(breadth-first),DST(Depth-first))、哈希算法、贪心算法(Greedy)、分治算法(Divide and Conquer)、回溯算法(backtrace)、动态规划(D

Read more

66. 加一


官方链接

https://leetcode-cn.com/problems/plus-one/

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

解法一

class Solution {
    public int[] plusOne(int[] digits)

Read more

1. 两数之和


官方链接

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

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路

判断一个数在集合内是否存在,要用到数据结构 Set 或者 哈希表 Python 2.3. 以上版本可用 enumerate

Read more