C/C++
文章平均质量分 60
bigface1234fdfg
贴在地上过日子,有个好处就是,摔也摔不到哪儿去。
展开
-
C++中的字符/字符串的I/O
cin最基本的应用,输入一个数字:cin>>a>>b; cout输入的是一个字符串,那么cin遇到空格、TAB、回车都会结束。char a[20]; cin>>a; coutcin.get()cin.get(字符变量名) 可以接收字符。cin.get(字符数组名, 需要接收字符的数目) 可以接收一行字符串,可以接收空格,只要不超过转载 2014-09-27 15:51:15 · 647 阅读 · 0 评论 -
同时找到最大值和最小值——编程之美
同时找到最大值和最小值——编程之美 给定一个数组,我们可以同时找到其中的最大数和最小数吗?要求时间复杂度尽可能的小。编程之美上面提供了三个思路,我把它们都实现了,并做一些讲解补充。 思路一:两次遍历,分别得到最大值和最小值。时间复杂度为O(2*N)。 思路二:把最前面的两个数作为最值的候选,然后后面的数两原创 2015-02-03 17:05:04 · 2621 阅读 · 0 评论 -
String to Integer (atoi)
String to Integer (atoi) Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself原创 2015-01-20 22:55:50 · 443 阅读 · 0 评论 -
C++中的strrev函数
C++中的strrev函数 C++中有函数strrev,功能是对字符串实现反转,但是要记住,strrev函数只对字符数组有效,对string类型是无效的。 具体见下面代码,其中我还自己实现了一下:#include#includeusing namespace std; int main(){ char s[100] = "china"原创 2015-01-20 10:10:59 · 12209 阅读 · 4 评论 -
C++中的字符数组逐个赋值时报错的解决方法
C++中的字符数组逐个赋值时报错的解决方法 C++中定义一个字符数组的时候,如果初始化,则cout的时候不会出错,但是在逐个字符赋值的时候,很容易出错。#include#includeusing namespace std; int main(){ //char s[100] = "china"; char s[100]; s[0]='c';原创 2015-01-20 10:03:55 · 2598 阅读 · 0 评论 -
求二进制数中1的个数(编程之美)
求二进制数中1的个数 题目描述:对于一个字节1BYTE = 8 bits的无符号变量,求其二进制表示中1的个数,要求算法的执行效率尽可能高。 题目分析:可以吧这个问题转化为判断这个数的最后1位数是否等于1,然后逐渐往右移位,不断判断下去,直到该数为零。 按照这种分析,那么就有两部分需要做:1)判断最后一位是否为零;2)如果右移位。原创 2015-01-22 08:57:30 · 1333 阅读 · 0 评论 -
Stanford机器学习课程笔记——单变量线性回归和梯度下降法
Stanford机器学习课程笔记——单变量线性回归和梯度下降法 1. 问题引入 单变量线性回归就是我们通常说的线性模型,而且其中只有一个自变量x,一个因变量y的那种最简单直接的模型。模型的数学表达式为y=ax+b那种,形式上比较简单。Stanford的机器学习课程引入这个问题也想让我们亲近一下machine learning这个领域吧~吴恩达大神通过一个房屋交易的问原创 2015-01-23 11:27:44 · 2281 阅读 · 1 评论 -
复习数据结构:排序算法(六)——堆排序
对于堆排序,前面一篇博文中已经复习到了堆排序,这里就简单介绍一下,并给出核心部分的解释。 堆排序是一种不稳定的排序,也是内排序。 时间复杂度为O(nlogn)。以最大堆为例,堆排序的基本思想是:1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区;2)将堆顶元素R[1]与最后一个元素R[n]原创 2015-02-25 09:42:00 · 845 阅读 · 0 评论 -
关于栈的几道面试题目
1. 括号匹配http://wenku.baidu.com/link?url=ExL5fVcWJJR2x_l5AWK9znXY98YGwLSYo56ZJtju4Ql6dJKvkHWGkBNPcfGLzm57bIQFwQKFt1dRgjE27N8EMfD462UyYtjGo3d_A8WZbna主要解题思想是遇到左括号,入栈;遇到右括号,出栈。当发现需要出栈的元素不匹配的时候,说明括号原创 2015-02-24 16:09:07 · 952 阅读 · 1 评论 -
复习数据结构:排序算法(八)——基排序
基排序是外排序,稳定的排序算法。 它的时间复杂度:O(d(r+n)),d为每个数的长度,r表示基数,n表示数组中元素的个数。 基数排序是另外一种比较有特色的排序方式,它是怎么排序的呢?我们可以按照下面的一组数字做出说明:12、 104、 13、 7、 9(1)按个位数排序是12、13、104、7、9(2)再根据十位排序104、7、9、12、13(3)再根据百原创 2015-02-25 16:37:52 · 1515 阅读 · 0 评论 -
复习数据结构:排序算法(五)——快速排序的各种版本
之前已经比较熟悉快排的基本思想了,其实现的方式也有很多种。下面我们罗列一些常见的实现方式:版本一:算法导论上的单向扫描,选取最后一个元素作为主元#includeusing namespace std; int partition(int data[], int low, int high){ int pivot = data[high]; // let the原创 2015-02-24 16:41:23 · 962 阅读 · 0 评论 -
复习数据结构:排序算法(七)——桶排序
桶排序是一种稳定的排序方法,也是一种外排序。 桶排序的时间复杂度:最坏情况运行时间:当分布不均匀时,全部元素都分到一个桶中,则O(n^2),当然[算法导论8.4-2]也可以将插入排序换成堆排序、快速排序等,这样最坏情况就是O(nlgn)。最好情况运行时间:O(n)。 也就说,前面介绍的排序算法要么是O(n^2),要么是O(nlogn),只有桶排序是可能实现O(n)排序的原创 2015-02-25 16:04:29 · 1141 阅读 · 0 评论 -
C++中的重载、覆盖和隐藏的区分
C++中经常用到重载、覆盖和隐藏这三个概念,也经常容易搞混。所以,这篇博文来整理一下它们之间的异同。1. 重载——实现多态性 A.相同的范围(同一个类中) B.函数的名字相同 C.参数类型不同(不能进行隐式类型转换) D.Virtual关键字可有可无2. 覆盖(重写)——派生类函数覆盖基类函数 A.不同的范围(分别位于基类与派生类中) B.函数名字相同 C.参数相同 D.基类函数必须原创 2015-04-12 21:01:09 · 755 阅读 · 0 评论 -
数组分割——解题笔记
数组分割——解题笔记 题目:有一个没有排序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组的和最接近。 分析:这道题目可以用动态规划求解,或者说是一个典型的0,1背包问题,对于第i的数,到底是放进去还是不放,就要看放了对结果有什么影响,不放对结果又有什么影响。而结果是依据题目而言的,这道题目中的结果就是数组之和原创 2015-02-04 15:12:52 · 1176 阅读 · 0 评论 -
位运算可以实现哪些功能
位运算可以实现哪些功能 许多时候,我们为了减少算法的时间复杂度,都是推荐使用位运算,今天我们整理一下位运算可以实现哪些功能。1. 乘除2 左移1位乘以2,左移n位乘以2^n; 右移1位除以2,右移n位除以2^n; 举个例子:#includeusing namespace std; int main(){原创 2015-02-03 10:47:32 · 1509 阅读 · 0 评论 -
求一个数的最大公约数的三种思路——解题笔记
求一个数的最大公约数的三种思路——解题笔记 编程之美上的题目:求一个数的最大公约数。 这道题目有三种解题思路,总结如下:思路一: 直接使用辗转相除法,这个不多介绍,代码如下:// 直接辗转相除法int gcd1(int a, int b){ for(int m = a%b; m != 0; m = a%b) {原创 2015-02-03 10:11:15 · 3251 阅读 · 0 评论 -
C++中的const修饰符
定义常量。const double PI=3.1415926; 这个好于在C中的宏定义;指向常量的指针。const int*p; p=&x; p本身是个变量,可以修改,指向其余的常量。但是p指向的内容*p不能直接修改。常指针。int *const p=&x; 指针p本身就是一个常量,只可以初始化,不能赋值改变。但是p指向的内容*p可以修改;指向常量的常指针。 const int *const原创 2014-09-27 15:56:49 · 543 阅读 · 0 评论 -
string类型自带的函数
可以直接赋值string s1, s2=" we are one"; s1=s2; 可以初始化连续字符string s1(8, 'A'); //AAAAAAAA可以求长度s1.length()可以用+实现字符串的联结s2=s3+' '+s4; insert插入s3.insert(7, "are one"); /原创 2014-09-27 17:01:09 · 1050 阅读 · 0 评论 -
C++中类的继承与派生
为了代码的可重用性,我们有了派生和继承。在既有的类的基础上创建一个新类,新类继承了既有类的成员,并且还允许增加信的成员,或者改造了既有类中的某些成员函数,这就是继承;基类不能被派生类继承的两类函数是构造函数和析构函数;派生类可以直接调用基类的数据成员和成员函数,也可以调用新增加的数据成员和成员函数;基类的private成员在派生类的成员函数不可以直接访问,但派生类的成员函数可以通过调用基类被继承的原创 2014-09-27 16:00:33 · 612 阅读 · 0 评论 -
C++中的类的定义
class Point{...};定义的形式。最后的分号不能少;在类的定义中不能对数据成员进行初始化;类的任何成员都必须指定访问属性。一般情况下将成员函数定义为public, 将数据成员定义为private or public;public的成员。既能够被该类的成员函数访问,又能够被类外部的其他函数访问;protected的成员。允许该类的成员函数和友元访问,允许派生类的成员函数访问;privat原创 2014-09-27 16:01:14 · 649 阅读 · 0 评论 -
C++的多态性
多态性就是用一个函数名定义不同的函数;静态多态性。同一个类中的同名函数,定义时在形式参数的个数、顺序、类型方面有所不同,在程序编译时就能根据实际参数与形式参数的匹配情况,确定该类对象究竟调用了哪一个成员函数。静态多态性可以通过函数重载和运算符重载实现;动态多态性。在基类与派生类中存在的同名函数,要求该同名函数的原型在基类和派生类中完全一致,而且是虚函数。在编译时无法确定究竟调用的是哪一个同名函数,原创 2014-09-27 16:03:05 · 549 阅读 · 0 评论 -
编程的一些细节
scanf函数是有返回值的,返回输入变量的个数,如果输入无效,则返回零;此处的输入无效是指用户输入的类型和scanf指定的类型不一致;做OJ题目的时候,如果要调用math.h头文件中的pow函数,注意可能会超时;for循环中,不要使用for (int i=0; i原创 2014-09-27 16:09:55 · 457 阅读 · 0 评论 -
STL之for_each, cout, cout_if, find, find_if
STL之for_each, cout, cout_if, find_if原创 2014-10-19 08:23:23 · 761 阅读 · 0 评论 -
STL容器(五)——heap
STL容器(五)——heap 我们可以调用STL中的heap堆,实现建堆和堆排序等操作。 首先,STL中的heap默认构建的是最大堆,程序如下:#include#include#includeusing namespace std; int main(){ int a[]={2, 3, 5, 1, 9, 6}; vector vec(a原创 2015-01-27 18:08:31 · 1141 阅读 · 0 评论 -
实现堆排序
实现堆排序 1. 堆排序的思想 堆是一棵完全二叉树,任何一个节点的val不大于(最小堆)或者不小于(最大堆)其左右孩子节点的关键字。 以最大堆为例,堆排序的基本思想是:1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区;2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,原创 2015-01-27 15:51:01 · 1618 阅读 · 0 评论 -
小数转换分数
小数转换分数 小数转换成分数的时候,是让小数有更精确的表示。这个问题可以分两种情况来解决:有限小数和循环小数。 对于有限小数:我们可以直接把后面的a作为分子,分母就是10^n,然后再约分。约分就是求分子和分母的最大公约数,然后除以它就可以了。最大公约数的问题我们可以通过辗转相除法来做(会面会讲到其他更加高效的方法求最大公约数)。原创 2015-01-29 10:09:52 · 6336 阅读 · 0 评论 -
C++中虚函数的作用
C++中虚函数的作用 C++中的虚函数作用是经常被问到的一个问题。它的作用是:实现动态多态性。当基类指针指向基类对象的时候,可以调用基类的函数;当指向共有派生类对象的时候,可以调用派生类的函数。原创 2015-01-12 15:43:42 · 568 阅读 · 0 评论 -
atol和strtol的区别
atol和strtol的区别 字符串中有两个重要的函数:atol和strtol,它们的功能都是字符数组,转数值。但是用法差异较大。我们下面来说一下这两个函数在具体使用的时候要注意哪些方面。 首先,说atol。 这个函数定义为:long atol(const char* s); 就是输入一个字符数组(注意,不是string类型的字符串)原创 2015-01-31 23:28:42 · 7139 阅读 · 0 评论 -
面试题中自增自减类型题目的解题技巧
在面试中,我们经常被问有关于自增自减的题目,这样的题目简单易懂,便于检验面试者的编程基本功,楼主在百度实习面试中就被问到。现在总结一下解题技巧: 对于以下,有int x = 5, y = 6, z; 题目1:z = ++x + y++; 题目2:z = ++x + x++; 题目3:x = ++x + x++; 对于上面的三道题目,原创 2015-05-18 15:57:58 · 2345 阅读 · 2 评论