- 博客(9)
- 资源 (2)
- 收藏
- 关注
原创 剑指offer-32从1到n整数出现1的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,,1一共出现了5次。 将输入的整数分为2部分,以后(n-1)位为分割点分为2部分,如21345分为1到1345和1346到21345,对第一部分递归调用算法,对后面的部分进行数学分析可以得出其中1的个数。首先最高位1出现的次数分为2种情况从1345到2134
2016-06-07 16:54:13 347
原创 剑指offer-31连续子数组最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 可以用动态规划来解决这个问题,用函数f(i)表示以第i个整数结尾的子数组的最大和,当以第i-1个整数结尾的子数组的最大和小于0时,此时以第i个整数结尾的子数组的最大和即为它自身,当以第i-1个整数结尾的子数组的最大和大于0时,以第i个整数结尾的子数组的最大和
2016-06-06 22:51:49 275
原创 剑指offer-30最小k个数
题目:输入n个数,找出其中的最小的k个数。 根据不同的方法,其中可以直接对输入的数组排序,时间复杂度是O(nlogn),如下所示: class Solution { public: vector GetLeastNumbers_Solution(vector input, int k) { vector small; if(k>input.size(
2016-06-06 20:54:26 208
原创 剑指offer-29数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 拿到题目的第一反应是将数组排序,然后判断数组中间的数字长度是否超过数组长度的一半。若数组中出现最多次数的数字为0且长度超过数组的一半时,输出也为0,该怎么判断是存在数字0超过一半长
2016-06-02 21:44:40 261
原创 剑指offer-28字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印所有字符串abc,acb,bac,bca,cab和cba。 先求取第一位所有字符的可能,即将第一位字符和后面所有的字符交换,然后继续递归求取后面子串的所有排列。 class Solution { public: vector Permutation(string str) { ve
2016-06-02 16:49:17 208
原创 剑指offer-27二叉搜索树与双向链表
题目:输入一个2叉搜索树,将该二叉搜索树转换成一个排序的链表。要求不能创建任何新的节点,只能调整书中节点指针的指向。 由于要求转换后的链表是排序的,而中序遍历可以从小到大遍历二叉树的每个节点,因此可以中序遍历该二叉树。 当遍历到根节点时,它的左子树已经转换成一个排序的链表,把链表的最后结点与根节点相连即把根节点加入排序链表,接着遍历转换右子树,转换左子树和右子树可以用递归的方法完成。 代码如
2016-06-01 21:59:38 247
原创 剑指offer-26复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。 /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL),
2016-05-26 22:32:50 266
原创 delete和delete[]的区别
看到一篇面经,上面写了这样一个问题“delete 跟delete[]到底有什么内在的区别?什么情况下必须使用delete[],否则内存泄漏。”当时第一反应不是当new一个对象时候需要回收时用delete,回收new[]创建的一组对象时用delete[]就行了。但是面经中给出以下2种情况: int a[100];delete a;上述代码是否有问题,会内存泄漏吗?class A{publi
2016-05-26 15:35:33 587
原创 结构体位制
马上就要开始找工作了,需要看一些相关的书籍以及编程练习,同时在博客定期更新一些学习中碰见的问题。第一篇博客试试水 - -。 在程序员面试宝典中第十二章提到结构体位制概念, struct a{ int x:1; int y:2; int z:33; }; 这个结构体a在定义中给了z的位域大小为33,而超过了整型变量的4字节大小,因而造成越界错误。在结构体内部定义位域能够节省空间,充分利
2016-04-05 22:13:17 864
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人