剑指offer
Fated-2
愿年轻的你海阔天空,归来时满载无悔的光阴。
展开
-
【剑指offer】和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述 输出所有和为S的连续正数序列...原创 2020-03-29 17:36:46 · 191 阅读 · 0 评论 -
【剑指offer】数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路 首先这道题本可以直接对所出现的数进行计数,然后输出数组中只出现一次的两个数字。 但是题上特地说了一下其他数字都出现了两次,说明题意是想考察的是另一个知识点: 位运算中的异或运算:两个相同的数进行异或时,结果为0 因此如果我们从头到尾依次异或数组中的每一个数字,那么最终得到的结果...原创 2020-03-29 16:44:43 · 175 阅读 · 0 评论 -
【剑指offer】平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路 根据平衡二叉树定义,任意节点左右子数高度不能相差超过1。因此我们需要用到求树的高度的函数,求出左子树跟右子树的高度,然后若左右子树高度差大于1则不是平衡二叉树,否则继续递归判断左右子树是否满足平衡二叉树。 代码 class Solution { public: int get_depth(TreeNode* pRo...原创 2020-03-28 14:55:54 · 114 阅读 · 0 评论 -
【剑指offer】第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路 使用map,给每个字符记录出现的次数。 代码 class Solution { public: int FirstNotRepeatingChar(string str) { int ...原创 2020-03-28 13:39:09 · 107 阅读 · 0 评论 -
【剑指offer】丑数
题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路 首先题意上说只包含质因子2、3和5的数称作丑数,那么就说明一个丑数它一定是由另一个丑数乘以2或者乘以3或者乘以5得到。 所以我们就定义一个vector丑数数组,然后用2或3或5不断乘以这个数组...原创 2020-03-28 12:11:50 · 103 阅读 · 0 评论 -
【剑指offer】把数组排成最小的树
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路 将数组进行自定义sort排序,x和y进行排序时看是x放前面组成的数小还是y放前面组成的数小。 代码 class Solution { public: static bool cmp(in...原创 2020-03-28 09:54:13 · 132 阅读 · 0 评论 -
【剑指offer】最小的K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路 有很多排序的算法,最简单可以用sort直接取出前K个数,然后下面就展示一种算法:归并(O(nlogn)),感觉比较稳定,然后时间复杂度也还可以,如果对其它排序有兴趣的童鞋可以进讨论区自行学习:https://www.nowcoder.com/questi...原创 2020-03-27 20:00:44 · 134 阅读 · 0 评论 -
【剑指offer】数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路 使用sort排序,然后遍历一次,找出数组中满足要求的数字,如果没有则输出0,时间复杂度为O( nlogn )。 代码 class Solution { publ...原创 2020-03-27 14:21:02 · 110 阅读 · 0 评论 -
【剑指offer】复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。和leeetcode-138题一样 思路 需要保存原链表中的每个random指针,可以使用map保存,将每个地址映射的位置序号存起来,然后创建新链表的时候直接访问位置序...原创 2020-03-27 13:18:22 · 99 阅读 · 0 评论 -
【剑指offer】字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 思路 全排列,因为可能有重复的字符,因此需要将全排列中重复的排列去掉,并按字典序排序。 代码 class Solu...原创 2020-03-27 12:45:25 · 102 阅读 · 0 评论 -
【剑指offer】二叉树中和为某一值的路径
题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路 递归根到叶子节点的所有路径,然后判断和是否为输入的值,是的话就将路径存储起来,注意路径必须是从根到叶子节点的路径。 代码 /* struct TreeNode { i...原创 2020-03-27 10:02:16 · 166 阅读 · 0 评论 -
【剑指offer】二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路 递归,因为后序遍历中序列的最后一位是根节点,然后找到序列中第一个大于根的下标记为k,则k的前面是左子树,k的后面是右子树,接下来就是判断右子树序列是否合法,若有比根节点小的数则说明不合法;不断递归,终止条件就是当左下标比右下标大时,就说明...原创 2020-03-27 09:38:46 · 80 阅读 · 0 评论 -
【剑指offer】从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 利用队列实现二叉树的层次遍历,要注意一定要特判一下二叉树为空的情况,我就坑这了~ 代码 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left...原创 2020-03-27 08:30:50 · 93 阅读 · 0 评论 -
【剑指offer】包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 思路 链接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49?f=discussion ...原创 2020-03-27 08:21:52 · 90 阅读 · 0 评论 -
【剑指offer】二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 ...原创 2020-03-25 13:22:06 · 104 阅读 · 0 评论 -
【剑指offer】树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路 递归要有递归的亚子,嗯~这道题果然是递归的亚子,要理清哪里需要递归,首先从A的根节点开始,先找到与B的根节点相同的节点,加入A中C节点与B的根节点相同,然后开始判断C节点的左子树、右子树和B节点的左子树、右子树是否相同,都满足之后返回true。 代码 /* struct Tree...原创 2020-03-25 12:05:41 · 111 阅读 · 0 评论 -
【剑指offer】链表中倒数第k个节点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路 方法有很多,可以用一个栈来存链表中的所有节点,然后输出栈中的第k个节点就可以了;也可以用快慢指针,快指针先走k-1步之后慢指针再走,当快指针走到头时,慢指针所在的节点即倒数第k个结点;下面代码是入栈的方法。另外要判断k不合法的情况。 代码 /* struct ListNode { int val; struct ListN...原创 2020-03-25 10:55:55 · 104 阅读 · 0 评论 -
【剑指offer】调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路 这道题有多种方法,最容易想到的就是另外再开一个vector数组,然后遍历原数组,将奇数存在新数组前面,偶数存后面;看了讨论之后发现有个大神的思路超简单,值得借鉴,就是使用迭代器遍历,把数组中的偶数删除然后插到...原创 2020-03-25 10:31:23 · 91 阅读 · 0 评论 -
【剑指offer】数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0。 思路 这道题比较简单,不过它有一个坑,就是要注意exponent可能为负数的情况,唉~我就中招了,所以说平时做题还是要想多一点儿~ 代码 class Solution { public: double Power...原创 2020-03-25 09:19:22 · 149 阅读 · 0 评论