
剑指offer
宝宝可乖了
这个作者很懒,什么都没留下…
展开
-
删除链表中重复的结点
玉颜不及寒鸦色 犹带昭阳日影来 C++,链表题。 对,链表题往往都不难,就是麻烦。。。 其实就是找到连续重复子序列的左右端点,然后删就行了。当然OJ没法判断你删没删,实际上你只要移动指针改变指向就好了哈哈哈。 有个屡试不爽的技巧,就是在原链表前加个头。 详细见代码: /* struct ListNode { int val; struct ListNode *next; ...原创 2019-10-11 23:29:05 · 145 阅读 · 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 · 464 阅读 · 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 · 258 阅读 · 0 评论 -
丑数----剑指offer
丑数 C++,丑数,质因数。 网上很多代码讲了怎么获得下一个最小的丑数,就是利用前面的每一个丑数分别*2,*3,*5,然后选出最小的那个。按照这个描述,只能每次将之前所有的丑数都和2、3、5乘一遍,那复杂度就是O(n),可网上写出来的代码都是O(n)的,你说气人不气人??? 看了一会自己看懂了,把思路讲一下: 首先每个丑数都是由之前的丑数乘(*2,*3,*5)出来的; 为了得到所有丑数,我们可以...原创 2019-05-09 17:29:27 · 213 阅读 · 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 · 272 阅读 · 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 · 197 阅读 · 0 评论 -
剑指offer真题:链表中环的入口结点
风乍起 吹皱一池春水 C++,链表快慢指针,leetcode原题。 我们定义快慢两个指针,从第一个结点触发,快指针一次走两个结点,慢指针一次走一个结点,于是会存在如下情况: 如果有环,则两个指针一定会再次相遇,且快指针经过的结点数是慢指针的两倍数; 如果无环,快指针先碰到空指针。 所以我们假设l_slow为慢指针经过的结点数,l_quick是快指针经过的结点数,环中的结点数为circle,...原创 2019-10-09 21:12:19 · 185 阅读 · 0 评论