程序员编程艺术
qq_2773878606
学生
展开
-
程序员编程艺术第一章(第二节)
第二节:两指针逐步翻转思路:abc defghi,要 abc 移动至最后abc defghi->def abcghi->def ghiabc定义俩指针, p1 指向 ch[0], p2 指向 ch[m];一下过程循环 m 次,交换 p1 和 p2 所指元素,然后 p1++, p2++;。第一步,交换 abc 和 def ,abc defghi->def abcghi原创 2015-11-14 16:00:35 · 363 阅读 · 0 评论 -
斐波那契额数列
斐波那契数列的形式:F(n)=0,,if n==0F(n)=1 if n==1F(n)=F(n-1)+F(n-2) if n>1我们可以递归的方法解决:int Fib(int n){ if (n == 0){ return 0; } if (n == 1){ return 1; } else { return原创 2015-12-06 15:47:37 · 485 阅读 · 0 评论 -
求数组的子数组之和的最大值
一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的)例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3)解法一:采用直接法,记Sum[i...j],为数组A中从第i到第j之间所有数之和,算出所有Sum,取其原创 2015-12-06 16:33:38 · 361 阅读 · 0 评论 -
子数组的最大乘积
给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。算法一: 枚举每一个不在N-1内的数,分别计算剩余N-1个数的乘积, 由于有N种情况,没种情况遍历计算乘积,所以n2.方法一#include#include#includeusing namespace std; long long L原创 2015-12-06 16:26:35 · 266 阅读 · 0 评论 -
寻找最近点对
方法1:两两点比较,寻找最近的两个点对,复杂度O(N^2),优点代码简单不容易出错double mindifference(double arr[], int n){ if (n < 2) { return 0; } double fmin = fabs(arr[0] - arr[1]); for (int i = 0; i < n; i++) { for (int原创 2015-12-06 16:06:21 · 305 阅读 · 0 评论 -
寻找数组中的最大值和最小值
解法1、 我们可以吧数字中的最大值和最小值看成两个独立的问题分别求出数组中的最大值和最小值。直接的方法就是扫描数字,找到最大数以及最小数。bool MaxMin(std::vector array, T* max, T* min) { if (array.size() < 1) { return false; } *max = array[0]; *m原创 2015-12-06 15:57:24 · 476 阅读 · 0 评论 -
二进制中1的个数(2)
在判断二进制中1的个数的时候,我们可以通过二进制位的移动进行判断,我们只需要判断最后一位是否为1即可:在判断的过程中我么可以进行与的操作达到母的,我们可以与1进行与的操作,今儿判断最后一位是否为1;#includeusing namespace std;int count(int x){ int num = 0; while (x) { num += x & 0x0原创 2015-11-15 15:47:52 · 367 阅读 · 0 评论 -
十进制中正整数N中1的个数
问题: 给定一个十进制正整数N,写下从一开始到N过程中所有1的个数?例如: N=2,写下1,2,出现了1个1 N=12,写下1,2,3,4,5,6,7,8,9,10,1,1,12,这里面1的个数是5问题分析和解法: 最简单的一个方法就是从1开始进行遍历到N,将其中每个原创 2015-11-15 18:09:54 · 648 阅读 · 0 评论 -
判断N!中二进制中最低位1的位置
判断二进制中最低位1的位置,我们判断在N!中质因子2的个数就可以:2的个数的判断等于N/2+N/4+N/8+.............................代码:二进制右移一位相当于除以2; int num(int N){int num=0;while(N){N>>=1;num+=N;}}原创 2015-11-15 16:20:53 · 841 阅读 · 0 评论 -
十进制中正整数N中1的个数(2)
上面的那种各个数据进行遍历的方法,耗时,我们可以通过根据数的规律进行观察是否存在某种规律:当N是1位数的情况: 如果N=3,那么从1到3的所有数字总,1,2,3,只有你个位数字的出现的个数是1, 当N=9时,出现1的个数也是1个。当N是两位数的时候: 当是两位数的时候,个位和十位上都可能出现1,我们分开考虑, 当N=33原创 2015-11-15 18:30:35 · 420 阅读 · 0 评论 -
判断N!阶乘中末尾0的个数
如果我们要判断出0的个数,如果我们直接求N!那么数据会很大,数据可能溢出,那么为了得到0的个数我们知道可以从10的角度进行判断,如果我们知道N!中10的个数,我们就可以判断出0的个数,如果N!=K*10^n,K是不能被10整除的数,那么我们可以根据n就可以得到0的个数,考虑10的个数,我们必须对N!进行质因数的分解,N!=(2^x)*(3^y)(5^z)..........原创 2015-11-15 16:09:21 · 3427 阅读 · 0 评论 -
第二章
流程控制 1、条件语句 if(condition) { statement; }或者 if(condition) {原创 2015-11-15 20:39:00 · 392 阅读 · 0 评论 -
编程艺术 二进制中1的个数
判断一个二进制数中1的个数:我们知道如果一个数除以2,原来的数字会减少一个0;如果除的过程中有余,那么表示当前位置有一个1;以 10 100 010为例: 第一次除以2:商是1 010 001,余数是0;第二次除以2:商是101 000,余数是1,这样我们可以根据余数判断出二进制的书中有几个1;代码:#includeusing name原创 2015-11-15 15:38:39 · 373 阅读 · 0 评论 -
程序员编程艺术第二章
第一节、一道俩个字符串是否包含的问题1.0、题目描述:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPOM答案是 true,所有在 st原创 2015-11-14 16:14:44 · 339 阅读 · 0 评论 -
程序员的编程艺术第一章
第一节:题目:定义一个字符串的坐旋转操作:就是把字符串前面的若干字符移动到字符串的尾部例如: abcdef 左旋转2位得到 cdefab 我们设计一个简单的思路: 每次平移一个单位,一共平移两个单位将字符串移动到位: abcdef----->bcdefa----->cdefab 这样就可以: void原创 2015-11-14 15:38:38 · 384 阅读 · 0 评论 -
快速寻找满足条件的两个数
能否快速的在数组中找到两个数,让这两个数之和等于一个给定的数字。解法1、一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字。 显然其时间复杂度为N(n-1)/2即O(N^2)。这个算法很简单,写起来也很容易,但是效率不高。一般在程序设计里面,要尽可能降低算法的时间和空间复杂度,所以需要继续寻找效率更高的解法。vector mindi原创 2015-12-06 16:18:22 · 660 阅读 · 0 评论