算法
文章平均质量分 92
算法心得!
aW5jaXBl
The story has just begun!
展开
-
master method(主定理)
master method(主定理)假设有递推关系式 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn)+f(n) ,其中 nnn 为问题的规模,aaa 为递推的子问题数量,nb\frac{n}{b}bn 为每个子问题的规模(假设每个子问题的基本规模基本一样),f(n)f(n)f(n) 为递推以外进行的计算工作。a≥1,b>1a \geq 1, b > 1a≥1,b>1 为常数,f(n)f(n)f(n) 为函数,T(n)原创 2021-09-18 18:17:03 · 2459 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
原题数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000思路因为题目给定了数组总是存在多数元素,所以这题利用 摩尔投票法 即可解决。首先给个暴力的解法:暴力C++class Solution {public: int majorityElement(vect原创 2020-11-02 10:59:35 · 159 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
原题请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-sh原创 2020-10-27 09:07:42 · 108 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)原创 2020-10-27 08:37:39 · 96 阅读 · 0 评论 -
978. 最长湍流子数组
原题当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最大原创 2020-10-26 20:58:12 · 87 阅读 · 0 评论 -
56. 合并区间
原题给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。注意:输入类型已于2019年4月15日更改。 请重置默认代码原创 2020-10-22 22:35:10 · 76 阅读 · 0 评论 -
763. 划分字母区间
原题字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。来源:力扣(LeetCo原创 2020-10-22 20:35:49 · 135 阅读 · 0 评论 -
Morris遍历
Morris遍历通常,二叉树的前、中、后序遍历有两种方法。使用递归,时间复杂度 O(N)O(N)O(N) 空间复杂度 O(N)O(N)O(N)使用栈(stack) ,时间复杂度 O(N)O(N)O(N) 空间复杂度 O(N)O(N)O(N)其中 NNN 代表节点数。但是 Morris 遍历可以做到在 O(N)O(N)O(N) 时间 O(1)O(1)O(1) 空间对整个二叉树进行遍历。Morris遍历流程记录当前节点为 root如果当前节点没有左孩子,root = root->ri原创 2020-10-18 14:37:18 · 169 阅读 · 0 评论 -
LCP 12. 小张刷题计划
原题为了提高自己的代码能力,小张制定了 LeetCode 刷题计划,他选中了 LeetCode 题库中的 n 道题,编号从 0 到 n-1,并计划在 m 天内按照题目编号顺序刷完所有的题目(注意,小张不能用多天完成同一题)。在小张刷题计划中,小张需要用 time[i] 的时间完成编号 i 的题目。此外,小张还可以使用场外求助功能,通过询问他的好朋友小杨题目的解法,可以省去该题的做题时间。为了防止“小张刷题计划”变成“小杨刷题计划”,小张每天最多使用一次求助。我们定义 m 天中做题时间最多的一天耗原创 2020-10-02 21:58:57 · 1239 阅读 · 1 评论 -
Leetcode刷题笔记147. 对链表进行插入排序
原题对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1->3输出: 1-原创 2020-09-24 20:15:56 · 138 阅读 · 1 评论 -
PAT1011
原题With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World Cup trophy in South Africa. Similarly, football betting fans were putting their mo原创 2020-08-16 20:58:59 · 175 阅读 · 0 评论 -
PAT1009
原题This time, you are supposed to find A×B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:K N1 a**N1 N2 a**N2 … N**K aNKw原创 2020-08-12 22:25:09 · 93 阅读 · 0 评论 -
PAT1008
原题The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 seconds to move the elevator up one floor, and 4 second原创 2020-08-10 18:49:33 · 100 阅读 · 0 评论 -
PAT1007
原题Given a sequence of K integers { N1, N2, …, N**K }. A continuous subsequence is defined to be { N**i, N**i+1, …, N**j } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given s原创 2020-08-10 15:28:28 · 108 阅读 · 0 评论 -
PAT1006
原题At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in’s and out’s, you are supposed to find the ones who have unlocked and原创 2020-08-10 11:18:34 · 104 阅读 · 0 评论 -
PAT1004
title: PAT1004date: 2020-08-04categories:博客tags:PATmathjax:presets: ‘\def\lr#1#2#3{\left#1#2\right#3}’原题A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.Input Specificati.原创 2020-08-07 21:09:33 · 110 阅读 · 0 评论 -
PAT1003 迪杰斯特拉(Dijkstra)
算法简介迪杰斯特拉(Dijkstra)是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。讲白了,就是给你一张有很多城市的地图,要你求指定两个城市之间的最小距离。基本思想给定一个上述图,要求某两个点之间的最短路径,这就叫做 有权图单源最短路 。如果是要求任意两个点之间的最短路径,这就是 有权图无源最短路径 ,无源最短路径用 Dijkstra 的时间复杂度原创 2020-08-07 11:59:11 · 248 阅读 · 0 评论 -
PAT1005
原题Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.Input Specification:Each input file contains one test case. Each case occupies one line which contains an N (≤10^100)原创 2020-08-05 16:49:20 · 97 阅读 · 0 评论 -
PAT1001
原题Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Each case contains a pair原创 2020-08-02 22:10:56 · 107 阅读 · 0 评论 -
PAT1002
原题This time, you are supposed to find A+B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:K N1 aN1 N2 aN2 … NK aNKwhere K原创 2020-08-02 22:09:34 · 135 阅读 · 0 评论 -
那些好用的位运算奇技淫巧
本文主要讲使用位运算的一些技巧。位运算位运算符号符号c/cpppython含义按位与a & ba & b1 & 1 = 1, 1 & 0 = 0, 同 1 为 1, 有 0 为 0按位或a | ba | b1 | 1 = 1, 1 | 0 = 1, 有 1 为 1, 同 0 为 0按位异或a ^ ba ^ b1 ^ 1 = 0, 1 ^ 0 = 1, 相同位不同为 1, 相同为 0按位取反~a~b~1 =原创 2020-07-30 19:32:16 · 213 阅读 · 0 评论 -
剑指offer系列13. 机器人的运动范围
原题地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m原创 2020-06-23 18:16:57 · 210 阅读 · 0 评论 -
剑指offer系列12. 矩阵中的路径
原题请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行原创 2020-06-03 08:16:37 · 225 阅读 · 0 评论 -
剑指offer系列11. 旋转数组的最小数字
原题把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为 1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-sh原创 2020-06-01 14:48:37 · 142 阅读 · 0 评论 -
剑指offer系列10- II. 青蛙跳台阶问题
原题一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21提示:0 <= n <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti原创 2020-05-31 10:28:53 · 300 阅读 · 0 评论 -
剑指offer系列10- I. 斐波那契数列
原题写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5来源:力原创 2020-05-30 10:48:13 · 441 阅读 · 0 评论 -
剑指offer系列09. 用两个栈实现队列
原题用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTa原创 2020-05-29 10:14:30 · 197 阅读 · 0 评论 -
剑指offer系列07. 重建二叉树
原题输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/思路Ⅰ. 先原创 2020-05-28 13:37:29 · 143 阅读 · 0 评论 -
剑指offer系列06. 从尾到头打印链表
原题输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/思路Ⅰ. 反转链表得到反转后的链表,遍历链表即可。C++代码/** * Definition f原创 2020-05-27 16:13:48 · 160 阅读 · 0 评论 -
剑指offer系列05.替换空格
原题请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/思路这个题感觉就十分简单了,但是,我竟然会想到按照空格拆分字符串再重新拼装,钻洞中????c++代码class原创 2020-05-26 12:40:11 · 220 阅读 · 0 评论 -
剑指offer系列04. 二维数组中的查找
原题在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定原创 2020-05-25 11:32:14 · 223 阅读 · 0 评论 -
剑指offer系列03. 数组中重复的数字
原题找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-原创 2020-05-24 20:48:39 · 157 阅读 · 0 评论 -
Leetcode刷题笔记之3. 无重复字符的最长子串
原题给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串...原创 2020-05-02 23:26:54 · 204 阅读 · 0 评论 -
Leetcode刷题笔记之199. 二叉树的右视图
原题给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-right-side-view解法二叉树题目,个人感觉要么 dfs ,要么 bfs。dfs 就是前序遍历,后序遍历,中序遍历,bfs 就是层次遍历。DF...原创 2020-04-22 11:33:21 · 170 阅读 · 0 评论 -
Leetcode刷题笔记之200. 岛屿数量
原题给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3解释: 每座...原创 2020-04-20 09:19:13 · 198 阅读 · 0 评论 -
Leetcode刷题笔记之11. 盛最多水的容器
原题给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表...原创 2020-04-18 11:36:16 · 228 阅读 · 0 评论 -
Leetcode刷题笔记之55. 跳跃游戏
原题给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎...原创 2020-04-17 12:47:31 · 166 阅读 · 0 评论 -
Leetcode刷题笔记之56. 合并区间
原题给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间...原创 2020-04-16 11:12:08 · 185 阅读 · 0 评论 -
Leetcode刷题笔记之445. 两数相加Ⅱ
原题给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出...原创 2020-04-14 11:48:02 · 151 阅读 · 0 评论 -
Leetcode刷题笔记之46. 全排列
原题给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations解法1. 直接调库C++的STL提供了 ...原创 2020-04-10 19:31:14 · 174 阅读 · 0 评论