
剑指OFFER
Axelrod Wayne
这个作者很懒,什么都没留下…
展开
-
和为S的两个数字
和为S的两个数字 输入一个数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。 如果有多对数字的和等于s,输出任意一对即可。 你可以认为每组输入中都至少含有一组满足条件的输出。 样例 输入: [1,2,3,4] , sum=7 输出: [3,4] 本题思路:先将数据复制到set,利用set的find函数判断是否存在一个值等于target-nums[i] class Solution { public: vector<int> findNumbersWithSum(vector原创 2020-05-18 14:11:30 · 126 阅读 · 0 评论 -
两个链表的第一个公共结点
两个链表的第一个公共结点 输入两个链表,找出它们的第一个公共结点。 当不存在公共节点时,返回空节点。 样例 给出两个链表如下所示: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 输出第一个公共节点c1 AC代码: /** * Definition for singly-linked list. *原创 2020-05-18 13:37:47 · 125 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回true,否则返回false。 假设输入的数组的任意两个数字都互不相同。 样例 输入:[4, 8, 6, 12, 16, 14, 10] 输出:true class Solution { public: vector<int> seq; bool verify...原创 2020-02-28 20:46:54 · 124 阅读 · 0 评论 -
复杂链表的复刻(剑指offer)
复杂链表的复刻 请实现一个函数可以复制一个复杂链表。 在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。 注意: 函数结束后原链表要与输入时保持一致。 /** * Definition for singly-linked list with a random pointer. * struct ListNode { * int ...原创 2020-02-28 20:11:39 · 177 阅读 · 0 评论 -
数据流中的中位数(剑指offer)
数据流中的中位数 如何得到一个数据流中的中位数? 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 样例 输入:1, 2, 3, 4 输出:1,1.5,2,2.5 解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。 class Solution { public: ...原创 2020-02-28 19:50:44 · 95 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 假设数组非空,并且一定存在满足条件的数字。 思考题: 假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢? 样例 输入:[1,2,1,1,3] 输出:1 class Solution { public: int moreThanHalfNum_Solution(vector...原创 2020-02-28 19:49:03 · 141 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数 输入一个32位整数,输出该数二进制表示中1的个数。 class Solution { public: int NumberOf1(int n) { int res=0; unsigned int m=n; //在此要注意当n负数时,右移会自动补1而不是0,因此把int改成unsigned int即可 while(m) ...原创 2020-02-17 15:18:59 · 133 阅读 · 0 评论 -
剪绳子
剪绳子 给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。 每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少? 例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。 样例 输入:8 输出:18 下面我们给出证明: 首先把一个正整数 NN 拆分成若干正整数只...原创 2020-02-17 15:06:14 · 189 阅读 · 0 评论 -
旋转数组的最小值
旋转数组的最小值 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个升序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 数组可能包含重复项。 注意:数组内所含元素非负,若数组大小为0,请返回-1。 样例 输入:nums=[2,2,2,0,1] 输出:0 暴力做法 class Soluti...原创 2020-02-16 15:44:46 · 387 阅读 · 0 评论 -
重建二叉树
重建二叉树 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下所示: ...原创 2020-02-16 15:08:28 · 117 阅读 · 0 评论 -
不修改数组找出重复的数字
不修改数组找出重复的数字 给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。 请找出数组中任意一个重复的数,但不能修改输入的数组。 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。 返回 2 或 3。 思考题:如果只能使用 O(1) 的额外空间,该怎么做呢? 暴力做法在此不做叙述,这里讲述空间复杂度O(1) 的做法 此题运用...原创 2020-02-16 14:35:37 · 400 阅读 · 1 评论 -
删除链表中重复的节点
删除链表中重复的节点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。 样例1 输入:1->2->3->3->4->4->5 输出:1->2->5 样例2 输入:1->1->1->2->3 输出:2->3 算法 (线性扫描) O(n) 为了方便处理边界情况,我们定义一个虚拟元素 d...原创 2020-01-18 21:19:41 · 225 阅读 · 0 评论