![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
傻子是小傲娇
acmer,摄影、钢琴、吉他爱好者
展开
-
《剑指Offer》 二维数组中的查找(知识点:查找,数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 时间限制:1秒空间限制:32768K solution1:遍历数组的行号,每一行采用二分查找来判断是否存在这个数。 solution2:从数组的第一行最后一列的元素开始进行如下判...原创 2019-07-12 10:58:25 · 109 阅读 · 0 评论 -
《剑指Offer》两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点。 长度相同有公共结点,第一次就遍历到; 没有公共结点,走到尾部NULL相遇,返回NULL 长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点; 没有公共,第二次一起到结尾NUL /* struct ListNode { int val; struct ListNode *next; ListNode(int x...原创 2019-09-10 10:05:43 · 89 阅读 · 0 评论 -
《剑指Offer》数组中的逆序对
这几天烦心的事一直来,真不知道该怎样才好,一个归并排序求逆序对也能从昨晚卡到现在,反正也睡不着,debug到凌晨,今早才发现一个传参数的问题,应该传引用。改了还是过不了,想了半天才想到数据溢出的问题,归并过程中也可能溢出的。希望一切都会好起来,哎。 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并...原创 2019-09-02 09:24:27 · 120 阅读 · 0 评论 -
《剑指Offer》 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 Solution1: 如果一个为空,则返回另一个。当两个都不为空时,比较大小选择小的那个加入新建的链表中,直到一方为空。 最后将不为空的链表加到新建链表的尾部。 Solution2: 递归解法 Solution1: /* struct ListNode { int...原创 2019-08-13 10:17:04 · 148 阅读 · 0 评论 -
《剑指Offer》 链表反转
题目描述 输入一个链表,反转链表后,输出新链表的表头。 头插法: /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(Li...原创 2019-08-12 16:35:59 · 100 阅读 · 0 评论 -
《剑指Offer》链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 思想: 如{1,2,3,4,5,6} ,k=2,即输出倒数第二个元素5 在cnt小于k时只有p移动,并且最后移动到了元素值值为2,q还是指向头结点(元素值为1),这时p,q两指针的偏移量为1 之后p,q都在一起移动,p,q两指针的偏移量始终为1,当p指向最后一个元素时,q指向倒数第二个元素 编码思路: 定义两个指针p...原创 2019-08-10 09:13:09 · 84 阅读 · 0 评论 -
《剑指Offer》 调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 先装奇数,在装偶数,再给原vector class Solution { public: void reOrderArray(vector<int> &array) { int ...原创 2019-08-06 18:17:17 · 81 阅读 · 0 评论 -
《剑指Offer》 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 位运算的两个小技巧: 1,n&1 1的二进制除了最后一位都为0,与n进行与运算。结果为1则n二进制最后一位为1,n为奇数,反之则为偶数 2,n&(n-1) n与n-1进行与运算,得到的结果是n的二进制去掉从左往右的第一个1.可以用来判断n是否为2的次幂 本题用第二个方法的性质,n可以进行...原创 2019-08-06 09:04:57 · 89 阅读 · 0 评论 -
《剑指Offer》 矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 时间限制:1秒空间限制:32768K n=0 ,0 n=1 ,1 n=2 ,2 n=n ,f(n-1)+f(n-2) 第一次情况,第一次竖着摆,有f(n-1) 第二种情况,第一次横着摆,有f(n-2) n的值 ...原创 2019-08-05 19:39:11 · 82 阅读 · 0 评论 -
《剑指Offer》斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 矩阵快速幂直接去求:矩阵快速幂 class Solution { public: struct mat{ int a[2][2]; }; mat mat_mul(mat x,mat y){ mat res; memset(res.a,0,sizeof(...原创 2019-08-01 15:19:23 · 106 阅读 · 0 评论 -
《剑指Offer》 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 1,设数组为:1,2,3,4,5; 此时array【left】<array【right】,直...原创 2019-07-31 15:33:45 · 100 阅读 · 0 评论 -
《剑指Offer》用两个栈实现队列
1,push时直接存入stack1, 2,pop时得检测两个栈同时为空的情况 3,pop时检查stack2是否为空,为空就把stack1中的元素全部加入。 4,pop最后返回的都是stack2的栈顶元素 class Solution { public: void push(int node) { stack1.push(node); } int pop() { int...原创 2019-07-30 19:42:04 · 91 阅读 · 0 评论 -
《剑指Offer》 替换空格(知识点:字符串)
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 时间限制:1秒空间限制:32768K 先统计一共有多少个空格,从后往前遍历,遇到空格之前每个字符向后移动 2*空格数 遇到空格: str[i + 2 * count] = '0'; str[i + 2 * co...原创 2019-07-12 16:17:31 · 91 阅读 · 0 评论 -
《剑指Offer》剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18 乘法计算,除了一以外,越多的数相乘结果越大 从2开始考虑,如果用2分段,存...原创 2019-09-24 09:33:50 · 99 阅读 · 0 评论