剑指offer
宝宝可乖了
这个作者很懒,什么都没留下…
展开
-
删除链表中重复的结点
玉颜不及寒鸦色犹带昭阳日影来C++,链表题。对,链表题往往都不难,就是麻烦。。。其实就是找到连续重复子序列的左右端点,然后删就行了。当然OJ没法判断你删没删,实际上你只要移动指针改变指向就好了哈哈哈。有个屡试不爽的技巧,就是在原链表前加个头。详细见代码:/*struct ListNode { int val; struct ListNode *next; ...原创 2019-10-11 23:29:05 · 131 阅读 · 0 评论 -
剑指offer---二进制中1的个数 C++ 题解
C++,其实考点中已经说了是位运算了,所以应该首先考虑利用位运算。按位与(&)运算符顾名思义,就是对操作数的二进制进行与运算,比如2&1,结果就是0,因为二进制计算10&01就是00嘛。n&n-1做了什么我们举个例子,假设n = 10,n的二进制为1010,n - 1即9,二进制为1001,此时我们再用1010&1001,结果就是1000,然后就发...原创 2019-03-14 22:57:39 · 450 阅读 · 1 评论 -
剑指offer真题:重建二叉树
以下思路参考柳婼文章:已知后序与中序输出前序(先序)C++。首先要知道一个结论,前序/后序+中序序列可以唯一确定一棵二叉树,所以自然而然可以用来建树。看一下前序和中序有什么特点,前序1,2,4,7,3,5,6,8 ,中序4,7,2,1,5,3,8,6;有如下特征:前序中左起第一位1肯定是根结点,我们可以据此找到中序中根结点的位置rootin;中序中根结点左边就是左子树结点,右边就是...原创 2019-03-12 12:44:55 · 242 阅读 · 0 评论 -
丑数----剑指offer
丑数C++,丑数,质因数。网上很多代码讲了怎么获得下一个最小的丑数,就是利用前面的每一个丑数分别*2,*3,*5,然后选出最小的那个。按照这个描述,只能每次将之前所有的丑数都和2、3、5乘一遍,那复杂度就是O(n),可网上写出来的代码都是O(n)的,你说气人不气人???看了一会自己看懂了,把思路讲一下:首先每个丑数都是由之前的丑数乘(*2,*3,*5)出来的;为了得到所有丑数,我们可以...原创 2019-05-09 17:29:27 · 195 阅读 · 0 评论 -
数组中只出现一次的数字---剑指offer
数组中只出现一次的数字C++,位运算,按位异或和按位与。首先就是要知道,一个数a和初始为0的数b一次异或(b = a ^ b),会得到b = a,两次异或,则b = 0。所以如果一个序列中,只有一个元素a出现次数为奇数,其他序列出现次数为偶数,将数b = 0与序列中所有值进行异或运算,则最终b = a。这道题中给的序列中有两个出现了一次的元素a、b,其他都出现了两次。我们可以把这个序列分成两...原创 2019-05-11 00:16:58 · 258 阅读 · 0 评论 -
不用加减乘除做加法---剑指offer
不用加减乘除做加法C++,位运算。不能用四则运算实现加法,就只能用位运算来实现了。在十进制中,加法的过程如下,例如a + b = 134 + 267:加法包括按位相加以及进位按位相加就是[1 + 2 = 3, 3 + 6 = 9, 4 + 7 = 1], 即a = [0, 3, 9, 1];进位就是把和当成四位数来看[0, 1 + 2 = 0, 3 + 6 = 0, 4 + 7 = ...原创 2019-05-21 15:24:58 · 185 阅读 · 0 评论 -
剑指offer真题:链表中环的入口结点
风乍起吹皱一池春水C++,链表快慢指针,leetcode原题。我们定义快慢两个指针,从第一个结点触发,快指针一次走两个结点,慢指针一次走一个结点,于是会存在如下情况:如果有环,则两个指针一定会再次相遇,且快指针经过的结点数是慢指针的两倍数;如果无环,快指针先碰到空指针。所以我们假设l_slow为慢指针经过的结点数,l_quick是快指针经过的结点数,环中的结点数为circle,...原创 2019-10-09 21:12:19 · 166 阅读 · 0 评论