剑_牛
yuanliang861
西西弗斯式永不停歇
展开
-
剑指offer 从上往下打印二叉树 C++ (层序历遍)
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解答/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub...原创 2019-02-24 09:46:12 · 400 阅读 · 0 评论 -
剑指offer 二叉搜索树的后序遍历序列 C++
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解答class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.empty()) return fal...原创 2019-02-24 10:48:50 · 177 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共结点 C++
题目描述输入两个链表,找出它们的第一个公共结点。解答方法:先计算两个链表的长度,因为有公共节点。计算出连个链表的长度差n,只需要将较长的一个链表的节点向后移动n个,那么两个链表则可以同时移动,只要相等,那么就找到了公共节点。这种方法的时间复杂度较好。如果直接用暴力法嵌套两个循环,时间复杂度不好。/*struct ListNode { int val; struct ListNod...原创 2019-02-28 18:54:37 · 244 阅读 · 0 评论 -
剑指offer 二叉树的深度 C++
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解答/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL...原创 2019-02-28 18:56:52 · 266 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径 C++
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)答案没有考虑数组长度大的数组靠前这个条件,但是还是通过了。/*struct TreeNode { int val; struct TreeNode *left; struct...原创 2019-02-25 10:50:16 · 370 阅读 · 0 评论 -
剑指offer 二叉搜索树与双向链表 C++
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路本题和leetcode14有相似之处。采用树的中序历遍的思想。解答/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :...原创 2019-02-27 09:03:41 · 588 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数字 C++
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解答直接用hash_table 就可使实现。主要是需要注意下面的第二个循环的写法,** m.first, m.second **class Solution {publi...原创 2019-02-27 09:34:54 · 430 阅读 · 0 评论 -
剑指offer 对称的二叉树 C++
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解答这样的思路是真不错,通过递归来实现。需要注意的是,要考虑某个节点是空的情况(NULL)。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; ...原创 2019-03-09 08:19:39 · 139 阅读 · 0 评论 -
剑指offer 翻转单词顺序列 C++
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解答需要注意subst...原创 2019-03-08 08:41:36 · 222 阅读 · 0 评论 -
相同字符的最远距离
题目给定字一个数字序列,找出其中距离最远的的字符(间隔最远)思路使用一个map<int,int> 保存数据。通过一个循环历遍整个序列。通过map来保存一个序列第一次出现的位置。如果当前元素没有在map中,那么说明是第一次出现,那么将它压入map中,value为下标。如果当前元素已经存在,那么就计算它和最先出现的元素的距离。再和最远距离比较,跟新最远距离和元素。#includ...原创 2019-03-30 16:46:33 · 1070 阅读 · 0 评论 -
找出数组中和为零的最长子序列的长度
题目找到一个数字序列中和为零的最长序,求出这个子序列的长度。例如:{100,1,2,-3,2,-3,1,2,1},其中从和为零的最长序列为{1,2,-3,2,-3,1},一个6个元素,所以长度为6。要求:时间复杂度O(N)思路因为时间复杂度有要求,所以不能用常规暴力法来实现。申请一个数组temp,大小为data.size()+1,即比原来的数组大1.temp[0]=0; ...原创 2019-03-30 17:36:29 · 1386 阅读 · 1 评论 -
删除重复字符
题目描述牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母’a’和字母’n’分别出现了三次和两次。但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。输入描述:输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母(‘a’ - ‘z...原创 2019-04-01 09:46:10 · 383 阅读 · 0 评论 -
数列中三个数的最大乘积
题目描述给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)输入描述:无序整数数组A[n]输出描述:满足条件的最大乘积示例1输入43 4 1 2输出24#include<iostream>#include<vector>#include<queue>using...原创 2019-04-01 17:27:41 · 797 阅读 · 0 评论 -
计算一个数二进制中1的个数
思路使用n和n-1按位与来实现。n-1之后,n中最低为的1变为0按位与,同为1的位置仍然为1,最后一个1的位置变为0。去掉一个1,计数器加1。循环,直到n所有的1都变为0,即n=0时结束循环。此时就可以计算出1的个数。注:此思路可以用于计算1的个数。int fun(n){ int count=0; while(n) { count++; ...原创 2019-04-01 21:08:29 · 604 阅读 · 0 评论 -
交错01串
题目描述如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,“10101”,"0101010"都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。输入描述:输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含’0...原创 2019-04-01 22:21:36 · 359 阅读 · 0 评论 -
剑指offer 栈的压入、弹出序列 C++
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路通过一个辅助栈来实现。将压入序列不断压入辅助栈,如果栈顶元素等于弹出序列元素,那...原创 2019-02-24 09:13:04 · 200 阅读 · 0 评论 -
剑指offer 把数组排成最小的数 C++
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路参考至 https://www.cnblogs.com/AndyJee/p/4676019.html通过定义一个比较规则,直接将整个数组排列起来,使得满足从前往后,连起来最小。解答class So...原创 2019-02-28 08:34:32 · 943 阅读 · 0 评论 -
剑指offer 连续子数组的最大和 C++
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-02-28 08:01:33 · 302 阅读 · 0 评论 -
剑指offer--斐波那契数列-跳台阶-变态跳台阶-矩形覆盖
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n&amp;lt;=39class Solution {public: int Fibonacci(int n) { vector&amp;lt;int&amp;gt; temp={0,1}; if(n&amp;lt;2) { ret...原创 2018-12-20 08:36:53 · 205 阅读 · 0 评论 -
剑指offer 二叉树的镜像 C++
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。思路相似题目: Leetcode 226. 翻转二叉树 C++从根节点开始,递归的交换每个节点的左右节点就可以实现。解答/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(...原创 2019-01-23 18:55:20 · 326 阅读 · 1 评论 -
Leetcode 54. 螺旋矩阵 C++ 剑指offer 顺时针打印矩阵
两处的答案是一样的。题目描述给定一个包含 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-01-23 20:12:29 · 1265 阅读 · 0 评论 -
剑指offer 链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。思路使用快慢指针来实现,先定义两个指针,都指向第一个节点。然后将快指针向后移动K次,这样快慢指针之间就间隔了K-1个节点。再将快慢指针都向后移动,直到快指针指向链表末端。此时,慢指针所指的节点就是倒数第k个节点。另外,注意程序中循环次数的控制,自己一开始就搞错了。解答/*struct ListNode { int val; st...原创 2019-01-21 08:58:47 · 127 阅读 · 0 评论 -
剑指offer 反转链表 C++
题目描述输入一个链表,反转链表后,输出新链表的表头。思路通过三个指针来实现。反转链表,希望在时间复杂度和空间复杂度较优,那么最好进过一次历遍就实现。经过分析,需要保存当前节点、上一个节点和后面一个节点。初始化:开始处理第一个节点的时候,他的下一个节点应该指向空节点。所以将第一个指针p1初始化指向一个空节点。第二个指针p2指向当前节点。第三个指针指向后面一个节点。之后通过循环控制,只要最后...原创 2019-01-21 09:39:23 · 432 阅读 · 0 评论 -
剑指offer 合并两个排序的链表 C++
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路先判断是否其中一个链表是空,如果是那么就返回另外一个链表。都不为空的时候,开始合并。比较两个链表的开头节点,将较小的节点接过去。最后,一个链表肯定先到达末尾,那么这个时候,将剩下的那个链表接到合并的链表上,完成。解答/*struct ListNode { int val;...原创 2019-01-21 10:43:49 · 461 阅读 · 1 评论 -
剑指offer 树的子结构 C++
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)注: 这里需要判断是否是子结构, 不需要判断是子树.这个和另外一个题很像,Leetcode 572. 另一个树的子树思路题目中说了,空树不是任意一个树的子结构,这一点需要注意。首先,思路是比较简单的,通过一个递归来实现。首先,如果有任何一棵树是空树,那么直接返回false;首先判断根...原创 2019-01-22 10:14:33 · 412 阅读 · 0 评论 -
剑指offer 二进制中1的个数 C++
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解答class Solution {public: int NumberOf1(int n) { int count=0; unsigned int flag=1; while(flag) { if(n &am...原创 2019-01-22 10:43:43 · 309 阅读 · 0 评论 -
剑指offer数值的整数次方 C++
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路这道题目,指明了指数exponent是一个int型的整数,这里就要考虑指数exponent是正还是负。另外,这种幂运算还有一个特殊的法则,如果指数是0,那么结果为1。这些都要考虑进去。如果用一个循环,直接让数相乘exponent次,这种做法通常是不可取的,一般都会运行...原创 2019-01-23 09:39:50 · 391 阅读 · 0 评论 -
剑指offer 最小的K个数 C++
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解答方法一时间复杂度O(NlognN)class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { ...原创 2019-02-27 21:12:18 · 756 阅读 · 0 评论 -
大整数相乘 leetcode 43. 字符串相乘
题目描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入72106547548473106236 982161082972751393输出70820244829634538040848656466105986748思路方法来源:...原创 2019-04-02 09:27:30 · 683 阅读 · 0 评论