剑指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 · 99 阅读 · 0 评论 -
两个链表的第一个公共结点
两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3输出第一个公共节点c1AC代码:/** * Definition for singly-linked list. *原创 2020-05-18 13:37:47 · 100 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:trueclass Solution {public: vector<int> seq; bool verify...原创 2020-02-28 20:46:54 · 87 阅读 · 0 评论 -
复杂链表的复刻(剑指offer)
复杂链表的复刻请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。注意:函数结束后原链表要与输入时保持一致。/** * Definition for singly-linked list with a random pointer. * struct ListNode { * int ...原创 2020-02-28 20:11:39 · 131 阅读 · 0 评论 -
数据流中的中位数(剑指offer)
数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。class Solution {public: ...原创 2020-02-28 19:50:44 · 61 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。思考题:假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,2,1,1,3]输出:1class Solution {public: int moreThanHalfNum_Solution(vector...原创 2020-02-28 19:49:03 · 107 阅读 · 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 · 92 阅读 · 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 · 152 阅读 · 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 · 337 阅读 · 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 · 83 阅读 · 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 · 367 阅读 · 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 · 199 阅读 · 0 评论