![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
文章平均质量分 78
vividly1990
会做饭的工程师!
展开
-
在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int value; ListNode *next;};void DeleteNode(ListNode **pListNode, ListNode *pToBeDeleted);在单向的链表中删除一个结点,最常规的原创 2013-04-23 21:23:31 · 606 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值链表结点定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;};通常打印是一个只读操作,我们不希望打印时修改内容。我们很容易想到的就是遍历链表。遍历的顺序当然是从头到尾,可是输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输入,而最后原创 2013-04-23 20:30:13 · 697 阅读 · 0 评论 -
从1到n整数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。这道题目开始是在《编程之美》这本书上面看到的,当时对于它的解析有点不理解,后来在参加大众点评在线笔试的时候正好遇到了这个题目,还好在有限的时间内将解题的时间复杂度达到了最优。最近又在《剑指offer》上面再次遇到这个题目,这里小小的总结一原创 2013-04-24 20:03:26 · 924 阅读 · 0 评论 -
求连续子数组的最大和,并记录其起始结束位置
问题描述:输入一个整型数组,数组里面有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。问题分析:相信我们最直观的做法就是依次遍历出所有子数组的和,选出最大的,这种做法的最好的时间复杂度都是O(n^2)。不符合题目的要求。换一种思路,我们采用分治法来分析,数组(A[0],A[1],...A(n-1)分为长度相等的两段数组(A[0]原创 2013-05-02 10:42:33 · 1143 阅读 · 0 评论 -
统计数字在排序数组中出现的次数
问题描述:统计一个数字在排序数组中出现的次数。例如排序数组{1,3,4,4,4,4,4,6,7,9},要查找数字4出现的次数,由于4在这个数组中出现了5次,所以输出5。分析:看到是排序的数组,理所当然的想到用二分查找。然而需要查找的数字可能在数组中出现多次,所以在查找到第一个目标数字后,还需要对目标数字的左右两边进行顺序扫描,直到找到排序数组中第一个目标数字和最后一个目标数字。因为要查找的数字原创 2013-05-06 17:26:35 · 1034 阅读 · 0 评论