编程之美
文章平均质量分 73
zhaojj1988
这个作者很懒,什么都没留下…
展开
-
二进制数中1的个数
题目: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如9(1001),有2个1。因此如果输入9,则该函数输出2。普通法思路:除2看看余数是不是1,最多循环32次这种方法。int Count1(int v){ int num = 0; while ( v ) { if ( 1 == v%2 ) { num++; }原创 2013-04-08 19:50:39 · 1419 阅读 · 0 评论 -
丑数
出自:何海涛的剑指offer#include "stdafx.h"#include using namespace std;int min(int a, int b, int c){ int temp = (a>b)?b:a; return (temp>c)?c:temp;}int GetUglyNumber(int index){ if (index原创 2013-09-21 19:53:53 · 1189 阅读 · 0 评论 -
第一个只出现一次的字符
来自:剑指offer#include "stdafx.h"#include using namespace std;char FirstNotRepeatingChar(const char* pString){ if ( pString == NULL ) return '\0'; unsigned int hashTable[256]; memse原创 2013-09-22 08:21:57 · 5717 阅读 · 0 评论 -
判断树是否为平衡二叉树
来自剑指offer问题1:求树的深度用递归做很简单,只要知道出口语句的别写错。struct BinaryTreeNode{ int m_Value; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};int TreeDepth(BinaryTreeNode* pRoot){ if (pRoot == NULL)原创 2013-09-22 11:14:08 · 29158 阅读 · 6 评论 -
数组中只出现一次的数字
来自剑指offer原创 2013-09-22 15:41:50 · 1201 阅读 · 0 评论 -
和为S的两个数字 VS 和为S的连续正数序列
来自剑指offer原创 2013-09-22 16:37:24 · 1282 阅读 · 0 评论 -
n个骰子的点数
来自剑指offer原创 2013-09-23 10:13:34 · 1312 阅读 · 0 评论 -
扑克牌的顺序
来自剑指offer分析:分三步:1:将数组排序2:找到数组中0个个数和相邻数字之间空缺的总个数3:比较二者的大小即可。代码:#include "stdafx.h"#include #include using namespace std;int compare(const void* arg1, const void* arg2){ retur原创 2013-09-23 18:49:35 · 2241 阅读 · 0 评论 -
不能被继承的类
来自剑指offer题目:用C++设计一个不能被继承的类分析:常规解法: 新奇解法:原创 2013-09-24 08:55:57 · 1765 阅读 · 0 评论 -
不用加减乘除做加法
来自剑指offer分析:原创 2013-09-24 09:51:07 · 2419 阅读 · 1 评论 -
求1+2+3+……+n
来自剑指offer原创 2013-09-24 08:15:35 · 6249 阅读 · 0 评论 -
数组中的逆序对
来自剑指offer原创 2013-09-24 11:02:28 · 1025 阅读 · 0 评论 -
将字符串转换成整数
来自剑指offer题目:把字符串转换成整数原创 2013-09-24 15:06:52 · 1493 阅读 · 0 评论 -
树中两个结点的最低公共祖先
来自剑指offer题目:求树中两个结点的最低公共祖先原创 2013-09-24 16:35:29 · 1959 阅读 · 2 评论 -
把数组排成最小的数
分析: 这道题和字符串全排列类似,即将所有可能的组合找到,比较一下找到最小的那个,便是结果。但是n个数字的全排列有n!中组合---->因此不可行!因此,我们可以将这些数字进行排序后,就可找到最小数且最大数也可以找了。考点:1:首先想到先将数组按照从小到进行排序;2:由于拼接的数字可能会越界,想到用字符串进行存储。代码:原创 2013-09-21 15:24:38 · 941 阅读 · 0 评论 -
求二叉树中任意两结点的距离
与该题的一道相似题为:求二叉树中结点的最长距离。两题看似有联系,但是做法不同。首先回顾一下:如何求二叉树中两结点的最长距离,即两点之间边数。分析:距离和深度之间存在必然联系。如果已知最长距离的两结点的最低公共根节点r,那么我们求r的左右子树深度相加即最长距离求出。如下图所示:我们发现A和B是最长距离,他们的最低公共根节点为C,我们知道C的左右子树高度均为3,那么如果最长路径通过原创 2013-10-04 13:49:34 · 13592 阅读 · 1 评论 -
数值的整数次方
前奏在写这个问题时,先说一下对于我们写程序时,应该考虑的问题。代码的规范程度 代码的书写规范程度会影响面试考官阅读代码的兴致,从下图可看出,书写、布局和命名规则都决定着代码的规范性。 首先,规范的代码书写清晰。绝大部分面试都要求应聘者在白纸或者白板上书写。不要因为担心没时间写代码就在纸上写潦草或者简略。通常面试代码量不会超过50行,所以关键是在写代码原创 2013-04-09 11:04:11 · 3168 阅读 · 0 评论 -
打印1到最大的n位数
题目:输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。方法1//利用case语句使字符++char CharPlus(char a){ char b; switch ( a ) { case '0': b = '1'; break; case '1': b = '2'; break; case '2': b原创 2013-04-09 17:06:43 · 6251 阅读 · 1 评论 -
判断是否存在给定树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。代码://给定的树结点类型class BinaryTreeNode{public: int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};/* 函数功能:判断pRoot1中是否有pRoot2的子结构 1、先找到pRoo原创 2013-04-10 20:30:44 · 990 阅读 · 0 评论 -
求连续子数组最大和
问题输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如输入的数组为-2,11,-4,13,-5,-2 和最大的子数组为11,-4,13因此输出为该子数组的和20。解析:本题解法多种多样,时间复杂度可以为:O(n^3),O(n^2),O(nlogn),O(n);我重原创 2013-04-15 10:05:15 · 1612 阅读 · 0 评论 -
实现Singleton模式
属于面试常考题型常考原因:设计模式在面向对象程序设计中有着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。例如:写一个类,且只能创建一个类对象实例方法一:网上常用的解法,就是将类的构造函数变成私有,然后创建一个静态成员函数,通过调用静态成员函数来调用私有的类构造函数,可以创建一个或者多个对象实例,都没有问题。例如:class Singleton2{pr转载 2013-04-16 09:53:41 · 727 阅读 · 0 评论 -
编写类String的构造函数、析构函数和赋值函数
具体代码:class String{public: String(const char *str = NULL); //默认构造函数 String(const String &other); //赋值构造函数 ~String(void); String & operator =(const String & other); //赋值函数private: char *m原创 2013-06-21 20:36:08 · 794 阅读 · 0 评论 -
顺时针打印矩阵
难点:边界条件判断有点复杂,可以画一个图形帮组我们思考。代码如下: //参数:数组名,列数,行数,这圈开始的坐标值(横纵坐标一样)void PrintMatrixInCircle(int** numbers, int columns, int rows, int start){ int endX = columns-1-start; int endY = rows-1-原创 2013-07-12 15:47:13 · 897 阅读 · 0 评论 -
中序遍历和先序遍历/后序遍历构建二叉树
给定二叉树的2个遍历序列(如先序+中序,先序+后序,中序+后序等),是否能够根据这2个遍历序列唯一确定二叉树?struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}; 参考:http://blog.csdn.net/s转载 2013-07-13 17:10:52 · 18704 阅读 · 2 评论 -
复杂链表的复制
struct ComplexListNode{ int m_nValue; ComplexListNode* m_pNext; ComplexListNode* m_pSibling;};以下图为5个结点的复杂链表,实线表示m_pNext指针的指向,虚线表示m_pSibling指针的指向方法一: 分两步 1:遍历一遍链表,用m_pNext指针将链表连起来,原创 2013-07-14 08:52:27 · 4660 阅读 · 1 评论 -
字符串全排列问题
分析:原创 2013-07-21 09:39:52 · 15086 阅读 · 3 评论 -
重建二叉树
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};// 输入:先序和中序的第一个指针和最后一个指针,// 递归调用,每次缺点当前结点BinaryTreeNode* ConstructCore(int* startPerorder, in原创 2013-07-12 09:43:33 · 1770 阅读 · 4 评论 -
数组上一系列查找问题
问题一:已知一数组是有2个递增子序列组合而成,找到两个子序列的分界点情况一:如果该数组是旋转数组,即第二个递增子序列的元素都比第一个递增子序列的元素小或可以通过旋转将2个子序列合并成一个递增子序列的问题。例如:{3,4,5,1,2}就是旋转数组,找到分界点值分析:由于第二个子序列的元素都比第一个子序列的元素小,我们可以采用二分思想,如果mid值比left值大,说明mid值在第一子序列上原创 2013-10-01 16:03:04 · 3317 阅读 · 1 评论 -
字符串转数字
一道面试题:不使用库函数,实现int StrToInt(const char* string);难点:(考虑尽量全面)1、空指针时,处理情况2、输入不合法时,处理情况3、溢出时处理情况测试用例:1、+7892、-123、7894、12-475、空6、超出int范围的一个数代码:/* 1、判断是否为空 2、判断正负 3、判断是否原创 2013-04-11 15:58:59 · 1306 阅读 · 0 评论 -
二叉搜索树与双向链表转化
分析:1:由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍历算法的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而更新当前链表的最后一个结点指针。:2:由于中序遍历过程正好是转换成链表的过程,即可采用递归处理转换代码如下:struct BinaryTreeNo原创 2013-07-13 19:49:48 · 5009 阅读 · 0 评论