刷题
0点51胜
这个作者很懒,什么都没留下…
展开
-
《剑指offer》——03数组中重复的数字
简单题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000解题思路空间换时间,采用哈希表,将...原创 2020-03-01 22:29:28 · 47 阅读 · 0 评论 -
《剑指offer》——面试题04. 二维数组中的查找
难度:简单题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14...原创 2020-03-03 22:21:07 · 53 阅读 · 0 评论 -
《剑指offer》——面试题18. 删除链表的节点
难度:简单题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head ...原创 2020-03-27 10:02:29 · 68 阅读 · 0 评论 -
动态规划——5. 最长回文子串
难度:中等题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解题思路先中间,再往两边找代码语言:c++class Solution {public: string longestPal...原创 2020-03-01 23:11:08 · 56 阅读 · 0 评论 -
《剑指offer》——面试题05. 替换空格
难度:简单题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000解答思路:主要面向string的操作时间复杂度:O(n)空间复杂度:O(n)class Solution {public: string ...原创 2020-03-02 23:20:54 · 51 阅读 · 0 评论 -
《剑指offer》——面试题06. 从尾到头打印链表
难度:简单题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解答思路:学习了stack操作push,top,pop。先把数据放到stack中,再弹出。时间复杂度:O(n)空间复杂度:O(n)代码class Solution {pub...原创 2020-03-03 20:31:59 · 53 阅读 · 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解答思路:二分法,利用半递增的特性。如果左边的小于右边...原创 2020-03-07 21:14:58 · 39 阅读 · 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解答思路:二分法序号内容处...原创 2020-03-26 20:48:15 · 60 阅读 · 0 评论 -
《剑指offer》——面试题22. 链表中倒数第k个节点
难度:简单题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解答...原创 2020-03-27 10:52:28 · 45 阅读 · 0 评论 -
《剑指offer》——面试题25. 合并两个排序的链表
难度:简单题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000解答思路:并归排序的一部分。依次比较,小的那个链表往后移动一格。复杂度复杂度O...原创 2020-03-27 11:54:24 · 47 阅读 · 0 评论 -
《剑指offer》——面试题30. 包含min函数的栈
难度:题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); ...原创 2020-04-01 17:06:17 · 49 阅读 · 0 评论 -
《剑指offer》——面试题32 - II. 从上到下打印二叉树 II
难度:简单题目从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]] 提示:节点总数 <= 1000解答...原创 2020-04-01 18:46:06 · 48 阅读 · 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),如计算初始结果为:10000...原创 2020-03-07 18:33:32 · 67 阅读 · 0 评论 -
《剑指offer》——面试题15. 二进制中1的个数
难度:简单题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2...原创 2020-03-26 17:30:45 · 50 阅读 · 0 评论 -
《剑指offer》——面试题17. 打印从1到最大的n位数
难度:简单题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9] 说明:用返回一个整数列表来代替打印n 为正整数解答思路:先求出最大值,然后把1~最大值放入数组。因为函数返回是vector,所以不用考虑大数情况。后...原创 2020-03-27 09:16:31 · 49 阅读 · 0 评论 -
动态规划——95. 不同的二叉搜索树 II
难度:中等题目给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:解答思路:选择根节点,把小于根节点的放到左边,把大于根节点的放到右...原创 2020-03-04 16:46:02 · 52 阅读 · 0 评论 -
《剑指offer》——面试题07. 重建二叉树
难度:中等题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000解答思路:先找前序的最前面那个数字,作为根。再在中序里面找到...原创 2020-03-06 19:06:26 · 56 阅读 · 0 评论 -
c++总结核心
代码存储区域分成哪些代码段、数据段、BSS段、堆区、文件映射区以及栈区代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。数据段:存储程序中已初始化的全局变量和静态变量bss 段:存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。堆区:调用new/malloc函数时在堆区动态分配内存,同时需要调用delete/free来手动释放申请的内存。映射区:存储动态链接库以及调用mmap函数进行的文件映射栈:使用栈空间存储函数的原创 2020-11-02 16:05:29 · 582 阅读 · 0 评论 -
c++总结
代码存储区域分成哪些代码段、数据段、BSS段、堆区、文件映射区以及栈区代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。数据段:存储程序中已初始化的全局变量和静态变量bss 段:存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。堆区:调用new/malloc函数时在堆区动态分配内存,同时需要调用delete/free来手动释放申请的内存。映射区:存储动态链接库以及调用mmap函数进行的文件映射栈:使用栈空间存储函数的原创 2020-11-02 16:05:14 · 2442 阅读 · 1 评论 -
《剑指offer》——41. 数据流中的中位数
难度:中等题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示原创 2020-08-16 13:13:53 · 105 阅读 · 0 评论 -
《剑指offer》——37. 序列化二叉树
难度:中等题目请实现两个函数,分别用来序列化和反序列化二叉树。示例: 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 "[1,2,3,null,null,4,5]"解答思路层序遍历,使用一个队列辅助知识点queue 的 push pop front to_string复杂度O时间复杂度O(n)空间复杂度O(n)代码/** * Definition for a binar原创 2020-08-15 22:22:44 · 91 阅读 · 0 评论 -
《剑指offer》—— 19. 正则表达式匹配
难度:困难题目请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "a*"输出: tr原创 2020-08-15 21:30:36 · 134 阅读 · 0 评论 -
《剑指offer》——47. 礼物的最大价值
难度:中等题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示:0 < grid.length <= 200原创 2020-08-12 13:18:25 · 82 阅读 · 0 评论 -
《剑指offer》——44. 数字序列中某一位的数字
难度:中等题目数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。 示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0 限制:0 <= n < 2^31解答思路1.先判断出第n位数字,坐落在几位数的数字中2.计算出第n位数字,在哪个数字中3.计算出第n位数字,在这个数字中的第几位原创 2020-08-12 13:06:13 · 131 阅读 · 0 评论 -
《剑指offer》——67. 把字符串转换成整数
难度:中等题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。原创 2020-08-11 22:41:20 · 91 阅读 · 0 评论 -
《剑指offer》——49. 丑数
难度:中等题目我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明: 1 是丑数。n 不超过1690。解答思路动态规划, Xn+1=min(Xa*2,Xb*3,Xc*5)知识点复杂度O时间复杂度O(n)空间复杂度O(n)代码class原创 2020-08-11 22:06:45 · 129 阅读 · 0 评论 -
《剑指offer》——43. 1~n整数中1出现的次数
难度:中等题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6 限制:1 <= n < 2^31解答思路分成两部分计算计算 1 到 99..9 (n-1个9) 有几个 1计算 从 10..0(n-1个0) 到 a1a2...an 有几个1前者可以通过找规律,计算原创 2020-08-08 19:11:35 · 132 阅读 · 0 评论 -
《剑指offer》—— 45. 把数组排成最小的数
难度:中等题目输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459" 提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0解答思路快排排序。比较大小的方法需要专门设计。比原创 2020-08-08 15:47:13 · 122 阅读 · 0 评论 -
《剑指offer》——63. 股票的最大利润
难度:中等题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。原创 2020-08-08 13:39:21 · 139 阅读 · 0 评论 -
《剑指offer》——59 - II. 队列的最大值
难度:中等题目请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入: ["MaxQueue","push_back","push_back","max_value","pop_front","max_value"][[],[1],[2],[],[],[]]输出: [null,null,nu原创 2020-08-08 11:31:38 · 165 阅读 · 0 评论 -
《剑指offer》——48. 最长不含重复字符的子字符串
难度:中等题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度原创 2020-08-06 16:15:10 · 79 阅读 · 0 评论 -
《剑指offer》——64. 求1+2+…+n
难度:中等题目求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45 限制:1 <= n <= 10000解答思路递归,相当于循环逻辑符短路,相当于条件判断知识点复杂度O时间复杂度O(n)空间复杂度O(1)代码class Solution原创 2020-08-06 15:30:04 · 108 阅读 · 0 评论 -
《剑指offer》——46. 把数字翻译成字符串
难度:中等题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi" 提示:0 <= num < 2^31解答思路dfs算法当接原创 2020-08-06 15:17:48 · 60 阅读 · 0 评论 -
《剑指offer》——56 - I. 数组中数字出现的次数
难度:中等题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限制:2 <= nums.length <= 10000解答思路1.对所有数做异或,最终得allXOR;2原创 2020-08-06 14:43:48 · 109 阅读 · 0 评论 -
《剑指offer》——剑指 Offer 38. 字符串的排列
难度:简单题目解答思路知识点vector的assign两种赋值复杂度O时间复杂度O()空间复杂度O()代码原创 2020-08-06 13:48:12 · 57 阅读 · 0 评论 -
《剑指offer》——35. 复杂链表的复制
难度:中等题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:原创 2020-08-04 22:07:48 · 49 阅读 · 0 评论 -
《剑指offer》——34. 二叉树中和为某一值的路径
难度:中等题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,原创 2020-08-04 20:52:14 · 61 阅读 · 0 评论 -
《剑指offer》——33. 二叉搜索树的后序遍历序列
难度:中等题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true 提示:数组长度 <= 1000解答思路递归。后序遍历,根节点在最后面。只要数原创 2020-08-04 19:32:30 · 63 阅读 · 0 评论 -
《剑指offer》——32 - III. 从上到下打印二叉树 III
难度:中等题目请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]提示:节点总数 <= 1000解答思路层序遍历,偶数行,先reverse一下再原创 2020-08-04 18:44:50 · 52 阅读 · 0 评论 -
《剑指offer》—— 32 - I. 从上到下打印二叉树
难度:中等题目从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7] 提示:节点总数 <= 1000解答思路层序遍历,使用 queue知识点复杂度O时间复杂度O(n)空间复杂度O(n)代码class Solution {原创 2020-08-04 17:19:19 · 52 阅读 · 0 评论