C/C++/算法杂记
文章平均质量分 63
韦轩
软件工程
展开
-
const小知识
在群里看见一道关于c语言与const的题,竟然没做对这是题目原题,正确答案是选AC顺便总结一下有个口诀就是左数右指,const在*号的左边,const指针指向的对象不能被修改,const指针也不是强制初始化,const指针可以指向其他对象const在*号的右边,const指针是常量,不能被修改,必选初始化,但是指针指向的内容可以被修改具体看代码#include #i原创 2015-03-28 23:39:41 · 398 阅读 · 0 评论 -
初级排序算法之选择排序
一、选择排序首先在未排序中找出最小的元素,存放到排序序列的起始位置,然后再从剩余的未排序序列中选出最小的元素放在已排序的末尾(未排序的首位)二、选择排序的特点1、选择排序对文件本身的顺序依赖很低,运行时间与输入无关2、长度为N的序列,最多需要比较N次,数据移动是所有排序算法中最少的3、比较次数是N(N-1)/24、赋值操作介于0~3(N-1)5、时间复杂度 O(N²原创 2015-05-12 20:45:22 · 701 阅读 · 0 评论 -
剑指offer-9 斐波那契数列
一、这个问题有很多变形比如台阶问题,矩形填充问题,猴子摘香蕉问题#include using namespace std;/* 和台阶问题,摘香蕉问题,矩形填充问题相同*///递归---效率非常低long long Fibonacci(unsigned int n){ if(n<=0) return 0; if(n==1)原创 2015-05-06 14:52:49 · 565 阅读 · 0 评论 -
剑指offer-10 二进制中1的个数
#include using namespace std;//位运算/* 一个数与1 进行& ,实际是这个数的二进制的最后一位与1&*//* 方法一:将这个数与1求&,然后右移一位 可能会引起死循环*/unsigned int NumberOfOne_1(int n){ unsigned int result = 0; while(n)原创 2015-05-06 15:18:37 · 433 阅读 · 0 评论 -
剑指offer-11 数值的整数次方
#include #include using namespace std;/* 1、考虑指数为0 2、考虑指数为负数 3、考虑效率*/double MyPower(double base,int exponent){ if(exponent==0) return 1; if(exponent==1) retur原创 2015-05-06 18:13:40 · 478 阅读 · 0 评论 -
剑指offer-8 旋转数组的最小数字
#include #include #include using namespace std;int MinOrder(int* data,int index1,int index2);/* 充分利用部分排序的特点----二分法 1、两个指针,初始化为数组的头和尾 2、确定循环的条件*///数组没有重复元素的情况int MinItem(int* a,int原创 2015-05-06 14:35:49 · 541 阅读 · 0 评论 -
剑指offer-12 打印1到最大的N位数
遇见数值问题,要考虑溢出---转化为字符串#include #include using namespace std;void PrintNumber(char* number);void PrintToMaxOfNDigits(unsigned int n);void Print1ToMaxOfDigits(char* number,int length,int index);/原创 2015-05-06 21:23:57 · 630 阅读 · 0 评论 -
剑指offer-14 调整数组顺序使奇数位于偶数前面
#include using namespace std;/* 两个指针和临时变量*/void Reorder(int* data,unsigned int length,bool(*func)(int)){ if(data==nullptr || length<=0) return ; int* pindex = data; int*原创 2015-05-06 22:04:30 · 614 阅读 · 0 评论 -
C和C++的static
一、C语言static属性1、所有没有加static的全局变量和函数都具有全局的可见性,添加static后,改变量和函数会对其他.c文件隐藏,只能在当前文件中引用2、static的第二个作用是保持变量内容的持久。static变量中的记忆功能和全局生存期,换句话说,static变量只初始化一次。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储原创 2015-05-20 16:08:47 · 623 阅读 · 0 评论 -
单链表
包含的操作创建单链表和销毁单链表插入元素和删除元素打印第k个结点和倒数第K个元素顺时针打印和逆时针打印单链表求长度合并两个单链表单链表逆转单链表排序Linklist.h#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDstruct LinkListNode{ int value; LinkList原创 2015-05-08 09:35:30 · 484 阅读 · 0 评论 -
不用加号求加法运算
不用加号求加法运算1、计算出不变位2、计算出进位(要左移)3、求加int aplusb(int a, int b){ //1、a,b进行异或运算,计算出不变的位 //2、计算出进位(求与) //3、相加即可 if (b == 0) return a; int temp1 = a^b; int temp2 = (a&b) << 1;//可能产生进位 return原创 2015-05-17 11:08:50 · 3006 阅读 · 1 评论 -
判断一个数是不是2的整数次幂
一、一个数是2的整数次幂,那么这个数除2一定也是2的整数次幂//方法一//一个数是2的幂,那么n/2一定也是2的幂bool checkPowerOf2_1(int n){ if(n<=0) return false; while(n) { if(n==1 || n==2) return true;原创 2015-05-28 12:40:57 · 2839 阅读 · 0 评论 -
C语言的可变参数
一、C语言的可变参数C语言定义了一系列宏来完成可变参数函数参数的读取和使用:宏va_start、va_arg和va_end;在ANSI C标准下,这些宏定义在stdarg.h中void va_start(va_list ap, last);// 取第一个可变参数的指针给ap last是函数声明中的最后一个固定参数(比如printf函数原型中的*fromat);type va_a原创 2015-05-21 18:58:15 · 669 阅读 · 0 评论 -
C语言字符串函数的一些实现
#include #include #include #include /*---------------------------------------------------------- 函数名 作 用---------------------------------------------------------- itoa(原创 2015-05-21 19:54:05 · 1302 阅读 · 0 评论 -
sizeof基础知识
一、c++中的sizeof1、一个空的class大小是12、添加构造函数和析构函数之后,大小还是13、添加虚析构函数#include using namespace std;class TestSizeof{public: void testfun(int a); TestSizeof(){} virtual ~TestSizeof(){}原创 2015-05-30 19:32:20 · 578 阅读 · 0 评论 -
C语言volatile、extern、auto、register的作用
一、volatile1、volatile关键字的含义volatile提醒编译器,它后面所定义的变量的值随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象2、volatile关键字的使用场景原创 2015-05-22 10:59:43 · 1607 阅读 · 0 评论 -
c语言大数阶乘和计算阶乘末尾的0的个数
一、大数阶乘的数据保存大数进行阶乘,将数据保存在数组中。这样遍历数组,就可以打印出阶乘的结果。核心计算就是:将阶乘的乘法转化为加法和进位比如:计算6!= 2*3*4*5*6 设为i初始result[1]=1,result.length=1,carry默认是0i = 2 -------->result[1]=(i*result[1])%10=2,carry=0,没产生进原创 2015-06-06 00:20:36 · 2815 阅读 · 0 评论 -
剑指offer-4 替换空格
#include using namespace std;/* 1、计算原来的长度 2、找出空格的个数 3、计算新长度 newlength = length+2*空格数量 4、从后面开始复制,如果遇见空格,则换成20%*/void ReplanceBlank(char oristr[],int length){ if(oristr==null原创 2015-04-28 18:09:18 · 543 阅读 · 0 评论 -
顺序栈
1、压入栈2、出栈(删除栈顶元素)3、返回栈顶元素4、返回栈中最小的元素5、返回栈中最大的元素6、判断栈是否已满7、判断栈是否是空的8、清空栈9、打印栈的元素mystack.h#ifndef MYSTACK_H#define MYSTACK_H#include #define SIZE 100/* 1、压入栈 2、出栈(删除栈顶元素原创 2015-05-11 18:34:52 · 443 阅读 · 0 评论 -
剑指offer-35 第一个只出现一次的字符
#include using namespace std;/* 构建哈希表 1、遍历字符串,把字符串映射到哈希表 2、改哈希表的键值是字符,值是该字符出现的次数 3、c/c++实现需要遍历两次*//* c语言没有哈希表*/char FirstNotRepeatingChar(char* pstring){ if(pstring==原创 2015-04-28 12:24:42 · 493 阅读 · 0 评论 -
剑指offer-39 二叉树的深度
一、二叉树或者树的问题,直接考虑广度搜索和深度搜索二、注意判断空节点#include #include #include using namespace std;struct BinnaryTreeNode{ int value; BinnaryTreeNode* left; BinnaryTreeNode* right; BinnaryTree原创 2015-04-26 22:22:49 · 692 阅读 · 0 评论 -
剑指offer-38 统计一个数字在排序数组中出现的次数
#include #include #include using namespace std;int GetFirstK(int* data,int length,int target,int start,int end);int GetLastK(int* data,int length,int target,int start,int end);int GetCountOfK(in原创 2015-04-26 21:23:00 · 606 阅读 · 0 评论 -
剑指offer-5 从尾到头打印链表
#include #include #include #include using namespace std;struct LinklistNode{ int value; LinklistNode* next; LinklistNode(int val) : value(val),next(nullptr) {}};/* 方法一、正常打印链表。原创 2015-04-29 11:03:59 · 527 阅读 · 0 评论 -
剑指offer-39-2 平衡二叉树
#include #include #include "F:\codeblocks\Utils\myhead.h"using namespace std;bool IsBalanced(BinnaryTreeNode* root);int TreeDepth(BinnaryTreeNode* root);int TreeDepth(BinnaryTreeNode* root){原创 2015-04-27 08:53:02 · 539 阅读 · 0 评论 -
剑指offer-42-2 左旋转字符串
一、翻转三步走1、翻转前N个字符2、翻转剩余的字符3、翻转整个字符#include #include using namespace std;//翻转字符串/* 翻转三步走 1、翻转前N个字符 2、翻转剩余的字符 3、翻转整个字符*/void ReverseString(char* pBegin,char* pEnd)原创 2015-04-27 12:46:42 · 803 阅读 · 0 评论 -
剑指offer-44 圆圈中最后剩下的数字
#include #include using namespace std;/* 转化成约瑟夫环问题求解*/int LastRemaining_2(unsigned int n,unsigned int m);int LastRemaining(unsigned int n,unsigned int m);int LastRemaining(unsigned int n,u原创 2015-04-27 15:08:31 · 621 阅读 · 0 评论 -
剑指offer-40 数组中只出现一次的数字
一、利用异或,首先找到只出现了一次的两个数字的异或值二、这个数字一定不为0,那么二进制中至少有一位1,找到这个第一位为1的位置--index三、然后将这个数组按照index分为两部分,第一部分每个数字的第index位都是1,第二部分每个数字的第index位都是0,也就是说两个不同的数字被分到两部分四、、然后对这两部分分别求异或即可。遍历,对数组的每一个元素进行判断#include原创 2015-04-27 09:43:10 · 765 阅读 · 0 评论 -
剑指offer-43 扑克牌的顺子
一、解决步骤1、对数组排序2、找出0的个数3、找出空缺的位置#include #include using namespace std;bool IsContinuous(int *number,int length);int compare(const void* arg1,const void* arg2);/* 1、对数组排序 2、原创 2015-04-27 13:49:53 · 637 阅读 · 0 评论 -
剑指offer-41 和为s的两个数和和为s的序列
一、和为s的两个数1、使两个指针,分别指向数组头和尾部2、计算和2.1如果大于目标和,尾指针向前移动2.2如果小于目标和,头指针向后移动二、和为s的序列1、初始化一个包含两个元素(1,2)的序列2、判断这两个元素的和与目标和的大小3、如果小于,那么序列最后一个元素+14、如果大于,那么删除第一个元素#include usi原创 2015-04-27 10:57:22 · 609 阅读 · 0 评论 -
剑指offer-42 翻转单词顺序
一、翻转单词序列1、将整个字符串翻转 2、翻转字符串中的每个字符#include #include using namespace std;/* 两步走 1、将整个字符串翻转 2、翻转字符串中的每个字符*/void Reverse(char* pBegin,char* pEnd);char* ReverseSequence(char* pDat原创 2015-04-27 12:02:50 · 620 阅读 · 0 评论 -
剑指offer-29 数组中出现次数超过一半的数字
#include using namespace std;/* 一种思路,这个数出现次数超过一半,那么这个数组的中位数一定是这个数 找到中位数即可 排序,时间复杂度O(logN) 有没有办法只遍历一次数组,找到中位数? 利用快速排序的partition*/int mypartition(int* data,int lo,int hi,int l原创 2015-04-27 21:03:02 · 501 阅读 · 0 评论 -
剑指offer-30 最小的K个数
#include #include #include #include using namespace std;/* 利用快速排序的patition*/vector GetLeastNumbers(int* data,int n,int k);int mypartition(int* data,int lo,int hi,int legth);int mypartiti原创 2015-04-27 22:56:16 · 433 阅读 · 0 评论 -
二叉树
1、创建二叉树2、先序遍历3、中序遍历4、后序遍历5、二叉树的深度6、二叉树的镜像7、二叉树某一路径的和是不是等于给定的数8、层次遍历二叉树#include #include #include #include #include #include using namespace std;typedef int Type;struct BinaryT原创 2015-05-10 20:12:04 · 443 阅读 · 0 评论 -
剑指offer-19 二叉树的镜像
#include using namespace std;struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int val) : value(val),left(NULL),right(NULL){}};void原创 2015-04-28 16:55:49 · 531 阅读 · 0 评论 -
剑指offer-3 二维数组中的查找
#include using namespace std;bool Find(int* matrix,int rows,int columns,int target){ //不断缩小查找空间 bool isfound = false; if(matrix != nullptr && rows >0 && columns>0) { int r原创 2015-04-28 17:08:50 · 587 阅读 · 0 评论 -
剑指offer-37 两个链表的第一个公共结点
第一步:找到两个链表的长度,计算链表的长度差--length第二步:让较长的链表先走length步第三步:两个链表同时前进,知道遇见一个相同结点#include using namespace std;/* 第一步:找到两个链表的长度,计算链表的长度差--length 第二步:让较长的链表先走length步 第三步:两个链表同时前进,知道遇见一个相同结点*/原创 2015-04-28 10:04:44 · 463 阅读 · 0 评论 -
斐波那契数列
斐波那契数列递归实现/** * @author 韦轩 * @time 2015/07/26 * @brief 递归求菲波那切数列的第N项 * @param n,无符号的整数,要求的第N项 * @return 返回第N项 * */long long getNthNumberWithRecursion(unsigned int n){ int result[2] = { 0原创 2015-07-26 23:20:31 · 623 阅读 · 0 评论