剑指offer
文章平均质量分 83
Traveling_DING
Traving Light(这张图片贡献不小)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目解析:只需扫描一下数组,按顺序将奇数提取出来放到数组中,按顺序将偶数提取出来放到数组中,并将偶数数组链接到奇数数组的后边,则达到题目要求,但是这种方法需要新增O(N)的空间,另一种方法可以减少空间的使用,按顺序原创 2017-02-19 11:47:36 · 666 阅读 · 0 评论 -
数组中字符出现的次数问题
在编程题中经常会遇到数字在数组中出现的次数这种问题,常见的问题有:第一次出现的数字,只出现一次的数字,一个数字出现几次,要注意数组的形式,是排序数组还是没有规律数组,考虑这几个方面,解题思路是不同的。下面就剑指offer中遇到的问题,列举如下:1、第一个只出现一次的字符题目描述:在一个字符串(1解题思路:如果能够按字符出现的顺序统计数字出现的次数,那么第一个次数等于1的字符位置就是原创 2017-06-04 12:49:39 · 2459 阅读 · 0 评论 -
判断链表有环没环及环的入口结点问题 和 判断两个链表是否相交
问题一:判断链表是否有环及入环结点问题1、先判断是否有环设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表) 1 bool isExitsLoop(list *head) 2 { 3转载 2017-03-14 11:44:46 · 1038 阅读 · 0 评论 -
关于链表中去掉重复数值的问题
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5题目解析:首先是排序列表,把重复的所有值都删除,而不是保留一个重复值第一种方法,建立一个新的头结点,就不需要考虑删除头节点和中间节点的区别,直接当做中间节点进行删除详细代码如下: ListNode原创 2017-03-03 18:27:16 · 621 阅读 · 0 评论 -
用两个栈实现队列 & 两个队列实现栈
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。执行push函数时,将数值放入stack1中,执行pop函数时,判断stack2是否为空,为空时将stack1的值全部放入stack2,不为空时则无需放入,然后弹出stack2的元素。class Solution{public: void push(int node) { sta原创 2017-02-14 15:25:23 · 373 阅读 · 0 评论 -
二叉树问题(打印二叉树,二叉树子结构、镜像、遍历,二叉树满足的路径)
题目一:从上往下打印二叉树从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目解析:这道题实质考查树的遍历算法,遍历通常有前序、中序、后序遍历,此题考查层次遍历。1、我们需要借助队列,实现按层打印,首先将根节点放入队列中,并将根节点的值放入vector中;2、判断根节点的左子树是否为空,不为空将该节点放入队列中;3、判断根节点的右子树是否为空,不为空将该节点放入队列中原创 2017-02-20 10:44:52 · 386 阅读 · 0 评论 -
二进制中含有1的个数
看到剑指Offer中二进制中1的个数这个题目,才感觉到位运算的强大。原来整数不用换成二进制,遇到位运算符会自动变成二进制进行计算。num & 1 为真则说明num是奇数,为0则说明num是偶数位运算的优先级:下面列举了一些常见的二进制位的变换操作。功能 | 示例 | 位运算----------------------+----------------------原创 2016-12-22 22:09:09 · 470 阅读 · 0 评论 -
任意非负整数,求1~n之间含有1的整数的个数
题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。解析:1、将整数划分成2部分,以个位、十位、百位.....分别为分界线,以32459为例,以百位为分原创 2017-01-17 21:24:50 · 782 阅读 · 0 评论 -
有关于链表的题目(打印链表、翻转链表、合并两个排序链表)
采用c++:开辟栈空间,将链表从头到尾放入栈中,然后再打印栈代码如下:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/c原创 2017-02-07 14:42:42 · 436 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。(NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。)对于这道题的直观解答,从头到尾遍历一遍,找到最小元素时间复杂度为o(n),但是这种方法没有利用旋转数组的特原创 2017-02-14 17:19:44 · 303 阅读 · 0 评论 -
回溯——矩阵中路径问题(0,1矩阵中最优路径、矩阵中的路径、机器人的运动范围)
问题一: 给定一个rows*cols 大小的0,1矩阵,给出起点和终点坐标,0可以走,1不可以走,每次只能向上下左右,走一步,求出从起点到终点的最短路径;解题思路:回溯法解决的经典问题,由于回溯的递归特性,首先要找到递归结束的条件,本题终点就是结束条件(在递归结束判断此路径是否为最优路径) 其次,找出递归的条件,本题是坐标x,y的值在合理范围内,并且此原创 2017-03-11 22:13:28 · 3968 阅读 · 0 评论
分享