
剑指offer
文章平均质量分 60
lightmare625
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第39题:数组中超过一半的数字Leetcode:169. Majority Element
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。法一。快排std::sort.从小到大的数组。O(nlogn).找到有序数组的中位数。计算他的个数。如果大于数组长度的一半就是要找的数字,否则返回0#inclu...原创 2019-03-07 23:52:56 · 777 阅读 · 0 评论 -
第31题:LeetCode946. Validate Stack Sequences验证栈的序列
题目给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3)...原创 2019-02-08 21:37:13 · 309 阅读 · 0 评论 -
第30题:LeetCode155. Min Stack最小栈
设计一个支持 push,pop,top 操作,并能在O(1)时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.p...原创 2019-02-08 13:21:33 · 275 阅读 · 0 评论 -
第29题:LeetCode54:Spiral Matrix螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]...原创 2019-02-08 12:03:21 · 393 阅读 · 0 评论 -
第28题:leetcode101:Symmetric Tree对称的二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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说明:如果你可以运用递归和迭代两种方法解...原创 2019-02-07 20:32:29 · 142 阅读 · 0 评论 -
第27题:Leetcode226: Invert Binary Tree反转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1 思路如果根节点存在,就交换两个子树的根节点,用递归,从下至上。、解一:auto tmp = invertTree(root->...原创 2019-02-07 19:25:47 · 196 阅读 · 0 评论 -
第26题:LeetCode572:Subtree of Another Tree另一个树的子树
题目描述给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s...原创 2019-02-07 15:52:52 · 286 阅读 · 0 评论 -
第25题:合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 测试用例// list1: 1->3->5// list2: 2->4->6void Test1(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = Create...原创 2019-02-07 11:51:35 · 233 阅读 · 0 评论 -
32-1题:不分行从上到下打印二叉树/BFS/deque/queue
题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印。考点1.广度优先遍历2.binary tree3.queue4.deque 思路按层打印:8、6、10、5、7、9、11 用STL的deque完成两端进出的操作。规律:1.从头节点开始放入容器。2.每次打印一个节点时,如果该节点有子节点,将其左子节点、右子节点依次放入容器内...原创 2019-02-09 10:10:52 · 272 阅读 · 0 评论 -
32-2题:LeetCode102. Binary Tree Level Order Traversal二叉树层次遍历/分行从上到下打印二叉树
题目 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]考点思路代码newcoder/*s...原创 2019-02-09 10:17:34 · 287 阅读 · 0 评论 -
第40题:最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。法1,std::sort。快排Onlognclass Solution {public: vector<int> GetLeastNumbers_Solution(vector<int&a原创 2019-03-10 18:54:15 · 194 阅读 · 0 评论 -
LeetCode51. N-Queens(剑指offer38-3)
Then-queens puzzle is the problem of placingnqueens on ann×nchessboard such that no two queens attack each other.Given an integern, return all distinct solutions to then-queens puzzle.Eac...原创 2019-03-03 13:30:44 · 210 阅读 · 0 评论 -
LeetCode77. Combinations(剑指offer38-2)
Given two integersnandk, return all possible combinations ofknumbers out of 1 ...n.Example:Input:n = 4, k = 2Output:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]回溯法。细节。循环...原创 2019-03-02 20:21:25 · 157 阅读 · 0 评论 -
LeetCode47.Permutations II(剑指offer38-1)
Given a collection of numbers that might contain duplicates, return all possible unique permutations.Example:Input: [1,1,2]Output:[ [1,1,2], [1,2,1], [2,1,1]]法1.递归。swap.回溯。唯一要多做的就是去重。用...原创 2019-03-02 18:00:21 · 730 阅读 · 0 评论 -
第34-2题:LeetCode113. Path Sum II
题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 /...原创 2019-02-12 23:58:41 · 176 阅读 · 0 评论 -
第34-1题:LeetCode112. Path Sum I
题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 ...原创 2019-02-13 00:09:09 · 140 阅读 · 0 评论 -
第33题:LeetCode255 Verify Preorder Sequence in Binary Search Tree 验证先序遍历是否符合二叉搜索树
题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 考点1.BST 二叉搜索树2.递归 思路 1.后序遍历,根节点是序列的最后一个。2.BST中左子树的值比根节点小,如果序列第一个数就比根节点大,说明没有左子树,break3.BST中右子树的值比根节...原创 2019-02-12 03:32:59 · 221 阅读 · 0 评论 -
32-3题:LeetCode103. Binary Tree Zigzag Level Order Traversal锯齿形层次遍历/之字形打印二叉树
题目 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]考点1....原创 2019-02-09 10:18:26 · 201 阅读 · 0 评论 -
第24题:反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。 测试用例// 输入的链表有多个结点void Test1(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ...原创 2019-02-07 08:47:35 · 243 阅读 · 0 评论 -
第23题:链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。考点1.鲁棒性:存在环;不为空链表;指针下一个节点存在时才往下走。2.复杂问题分解成简单问题 。 思路1.判断链表中存在环:两个指针,同时从头节点出发,fast的走两步,slow的走一步。如果fast追上了slow,则说明存在环。如果fast走到了末尾,fast->n...原创 2019-02-06 23:35:50 · 138 阅读 · 0 评论 -
第11题:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 考点:二分查找法如果从头到尾遍历,时间复杂度是O(N),用二分查找法的时间复杂度是O(logn)。...原创 2019-01-29 21:06:45 · 168 阅读 · 0 评论 -
第22题:链表中倒数第k个结点
题目描述题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。 考点鲁棒性:指针为nullptr,链表节点数少于K,输入的K为0双指针遍历:只用遍历一次,复杂度O(n)unsigned int:...原创 2019-02-06 18:45:22 · 188 阅读 · 0 评论 -
第35题:LeetCode138. Copy List with Random Pointer
题目 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 考点1.hash 空间换时间 On^2->On2.双指针,野指针的鲁棒判断思路1.复制节点到原链表后面。copy->link->next 。只复制节点的值和next,不复制随机指针。cloneNode->rando...原创 2019-02-14 23:50:21 · 240 阅读 · 0 评论 -
面试题7:重建二叉树
对vector使用指针#include <stdio.h>#include <iostream>#include <vector>using namespace std; int main(){ vector<int> a,b,c; for (int i = 0; i < 3; i++) { a.push_bac...原创 2018-07-15 23:08:53 · 580 阅读 · 0 评论 -
第十题:斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 难度:⭐⭐⭐⭐关键:不能用递归,时间复杂度会以n的指数方式增长,导致stackoverflow。要用循环,为了计算量不大,要自下而上的循环,将运算结果存在中间变量中,这样就是O(n),以一定的空间代价避免代价更大的重复计算的栈空间浪费。思路:从2开始。f(2)...原创 2018-07-18 23:01:10 · 296 阅读 · 0 评论 -
题目9:用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 难度⭐思路stack1 正向队列 用于添加。stack2 反向队列 用于删除。我的代码。class Solution{public: void push(int node) { stack1.push(node); } int pop() {...原创 2018-07-17 23:11:02 · 116 阅读 · 0 评论 -
面试题6:从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。1.基于循环的栈提交时间:2018-07-11 语言:C++ 运行时间: 5 ms 占用内存:476K 状态:答案正确/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :...原创 2018-07-12 00:13:39 · 217 阅读 · 0 评论 -
面试题5:替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。提交时间:2018-07-10 语言:C++ 运行时间: 4 ms 占用内存:480K 状态:答案正确class Solution {public: void replaceSpace(char *str,int length...原创 2018-07-11 22:48:13 · 131 阅读 · 0 评论 -
面试8:找二叉树的下个结点
关键是举例和画图的思想。主要分三种类型。1.有右子树:返回 右子树的最左节点。2.无右子树:2.有父节点:2.是左结点:返回 父节点。3.无右子树:3.有父节点:3.是右节点:找到第一个是左结点的节点,返回 该节点的父节点。//这里的while我出了个bug4.无右子树:4.无父节点:返回 空。 我的代码。 /*struct TreeLinkNode {...原创 2018-07-17 00:11:03 · 112 阅读 · 0 评论 -
第21题:调整数组顺序使奇数位于偶数前面
第一题题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 方法一 第一遍void ReorderOddEven_1(int *pData, unsigned int length){ //1.如果数组为nullptr,长度为0,返回 if...原创 2019-02-06 15:50:10 · 252 阅读 · 0 评论 -
第20题:表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。测试用例: Test("原创 2019-02-05 22:11:37 · 138 阅读 · 0 评论 -
第12题:矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为...原创 2019-01-31 22:50:17 · 160 阅读 · 0 评论 -
第13题:机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 考点:回溯法1.从(0,0)开...原创 2019-02-01 14:11:34 · 216 阅读 · 0 评论 -
第14题:剪绳子
// 题目:给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。// 每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。 考点1.动态规划 :时间复杂度:O(N^2) 空间复杂度:O(n)1.1 寻找一个问题...原创 2019-02-01 17:05:09 · 199 阅读 · 0 评论 -
第15题:二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 考点:位运算 -------------可能陷入死循环的解法--------------------- 从n的2进制形式的最右边开始判断是不是1,该解法如果输入时负数会陷入死循环,因为负数右移时,在最高位补得是1,本题最终目的是求1的个数,那么会有无数个1了。 -------------...原创 2019-02-02 21:13:01 · 215 阅读 · 0 评论 -
第16题:数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 代码的完整性:1.功能测试2.边界测试3.负面测试 3种处理方法/优点/缺点1.返回值/与系统API一致/无法直接作为函数参数2.全局变量/可以直接作参数/可能忘记检查,有安全隐患3.抛出异常/逻辑明了/有些语言不支持异常 ...原创 2019-02-03 00:00:53 · 149 阅读 · 0 评论 -
第17题:打印1到最大的n位数
面试题17:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。 考点:用字符串或者数组表达一个大数。 思路1.由于不知道n的范围,n很大的时候,用int或者long long 可能会溢出。2.用字符串表达大数。'0'-'9',因为是N位的数,用N+1的字符串存储,最后一位保存结束符'...原创 2019-02-03 23:57:42 · 468 阅读 · 0 评论 -
第18题:在O(1)时间删除链表结点+删除链表中重复的节点
题目描述:题目描述在O(1)时间删除链表结点给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 考查创新编程能力。 思路:1.如果从头到尾遍历,时间O(n)2.如果将待删除节点的下一个节点j复制到待删除节点i上,然后将i的下一个节点指向j的下一个节点,删除j的节点。3.对于尾节点,需要从头开始遍历4.对于只有一个节点的链表,要将*HeadN...原创 2019-02-04 19:38:17 · 198 阅读 · 0 评论 -
第19题:正则表达式匹配
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 考点:正则表达式递归字符串 思路:bool matc...原创 2019-02-05 14:14:19 · 237 阅读 · 0 评论 -
面试题4:二维数组的查找
1.题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入描述:array: 待查找的二维数组target:查找的数字输出描述:查找到返回true,查找不到返回falsec++版本#include <cstdio>...原创 2018-07-08 17:12:09 · 206 阅读 · 1 评论