
编程之美
文章平均质量分 78
yuhan_9204
这个作者很懒,什么都没留下…
展开
-
编程之美笔记2 一摞烙饼的排序问题
1.自己写的.cpp #include using namespace std; int getMax(int data[],int n) { int max=0; int pos=0; for(int i=0;i { if(data[i]>max) { max=data[i]; pos=i+1; } }原创 2014-11-04 11:24:41 · 397 阅读 · 0 评论 -
编程之美读书笔记2.16—求数列中最长递增序列
解法1: 时间复杂度为 O(N^2) .cpp#include using namespace std;int Lis(int A[],int length){ int *L=new int[length]; for(int i=0;i<length;i++) { L[i]=1; //初始化默认的长度 for(int j=0;j<i;j++)原创 2015-01-03 17:52:12 · 464 阅读 · 0 评论 -
编程之美读书笔记2.17—数组循环移位
解法1:直接 O(K*N) 解法2:.cpp原创 2015-01-03 21:58:21 · 334 阅读 · 0 评论 -
编程之美读书笔记3.1—字符串移位包含的问题
给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。1. 最直接的方法对S1进行循环移位,遍历所有可能性。#include using namespace std; void main(){ char原创 2015-03-03 08:57:38 · 502 阅读 · 0 评论 -
编程之美读书笔记3.2—电话号码对应英语单词
1. 简述 电话的号码盘一般可以用于输入字母。如用2可以输入A、B、C,用3可以输入D、E、F等。 对于号码5869872,可以依次输出其代表的所有字母组合。如:JTMWTPA、JTMWTB······ 1) 设计程序,尽可能从这些字母组合中,找到一个有意义的单词来表述一个电话号码。如单词"computer"来描述号码26678837。 2) 对于一个号原创 2015-03-04 09:53:42 · 620 阅读 · 0 评论 -
编程之美读书笔记2.1—求二进制数中1的个数
1。原创 2014-11-25 10:00:35 · 392 阅读 · 0 评论 -
编程之美读书笔记2.2—不要被阶乘吓倒
问题1) 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。 2) 求N!的二进制表示中最低位1的位置。 3)给定整数n,判断它是否为2的方幂 问题1详解 解法1: 解法2: 代原创 2014-11-26 10:49:03 · 342 阅读 · 0 评论 -
编程之美读书笔记2.5—寻找最大的K个数
给定一个N个数的数组arr[N],任意排列,选出其中最大的K个数。方法1:排序,取后K个数。复杂度: O(NlogN)方法2:partition,随意选一个数组中的数key,对数组进行划分,返回位置pos,如果pos右侧的数等于K,则结束,如果大于K,则再对从pos到数组尾的子数组进行partition,如果小于K,则对从数组头到pos位置的子数组进行partition原创 2014-11-28 09:37:47 · 522 阅读 · 0 评论 -
编程之美读书笔记3.3— 计算字符串的相似度
问题描述:许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的 字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如转载 2015-03-06 11:45:47 · 457 阅读 · 0 评论 -
编程之美1.4——买书问题
一,问题 上柜的《哈利波特》平装本系列,一共有五卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下: 本数 2 折扣 5% 本数 3 折扣 10% 本数 4 折扣 20%转载 2014-11-24 09:55:41 · 374 阅读 · 0 评论 -
编程之美读书笔记2.15—子数组之和的最大值
解法1:枚举每一个矩形区域,然后再求这个矩形区域中元素的和原创 2014-12-29 18:46:32 · 461 阅读 · 0 评论 -
编程之美读书笔记2.12—快速寻找满足条件的两个数
(1)递归,从第一个元素和最后一个元素相加,如果大于sum,则a b-1,继续判断两个数的和;如果小于sum,则 a+1 b元素,继续判断两个数的和#include using namespace std;void find(int data[],int a, int b, int s){if(a<b){ if(data[a]+data[b]==s) cout原创 2014-12-15 10:55:53 · 408 阅读 · 0 评论 -
编程之美读书笔记2.10—寻找数组中的最大值和最小值
1.先扫描一遍数组找到最大值,然后再扫描一遍找到最小值,共2*N次2.把数组分成两部分,然后从这两部分中分别找出最大值和最小值。首先相邻的两个数分子啊同一组中,例如{5,6,8,3,7,9},分为5 6, 8 3, 7,9然后偶数位调换为较大的数,相应的奇数位为较小值 6 5, 8 3, 9,7 需0.5次最后比较偶数位得到最大值9 ,比较奇数位得到最小值3,需要原创 2014-12-12 10:05:06 · 584 阅读 · 0 评论 -
编程之美读书笔记2.18—数组分割
解法1(参照每天一算法32): 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差为 A' = sum(a) - a[i] + b[j] - (sum(b)- b[j] + a[i]) = sum(a) - sum(b) - 2 (a[i] - b[j]) = A - 2 (a[i]原创 2015-01-04 11:13:59 · 406 阅读 · 0 评论 -
编程之美读书笔记2.21—之考加法的面试题
解法1:时间复杂度降为O(sqrt(N)) 假设这个正整数n可以表示成2个以上的连续自然数之和,那么可以设这个序列为a,a+1....a+i。 那么n=a+(a+1)+...+(a+i)=(i+1)*a + (i+1)*i/2。如果我们可以确定i的范围,那么我们就可以遍历i,对于所有的i的取值,得到对应的a的值,然后判断a是否为整数,即可知是否符合要求。原创 2015-01-08 14:52:24 · 382 阅读 · 0 评论 -
编程之美读书笔记2.20—程序理解和时间分析
1. 理解这个程序就是从输出的地方入手即可。这个程序输出的条件是hit==2&&(hit1+1==hit2),而hit表示满足i%r[j]!=0的条件的次数,hit==2表示这个条件只能被满足两次,也就是说对于一个i,在rg数组的30个数中,这个i能被其它28个数整除,而不能被其中两个数整除。而hit1表示第一个不能整除i的数的下标,hit2表示第二个不能整除i的下标,这两个下标被要求相原创 2015-01-07 18:14:23 · 476 阅读 · 0 评论 -
编程之美读书笔记2.19—区间重合判断
#include#include#includeusing namespace std;struct Interval //区间定义{ int start,end; Interval(int _start, int _end):start(_start),end(_end){}}; bool cmp(const Interval &lhs, const Interv原创 2015-01-06 17:03:55 · 455 阅读 · 0 评论 -
编程之美读书笔记2.6—精确表达浮点数
解答一:用于小整数,将无限循环小数0.a1a2...an(b1b2...bm)分为非循环部分和循环部分。X=((a1a2...an)*(10^m-1)+b1b2...bm)/((10^m-1)*10^n)#include using namespace std;#include using namespace std; long long gcd(原创 2014-12-06 11:46:45 · 372 阅读 · 0 评论 -
编程之美读书笔记2.7—最大公约数问题
1.辗转相除法原创 2014-12-06 16:04:41 · 379 阅读 · 0 评论 -
编程之美读书笔记2.13—子数组的最大乘积
1.时间复杂度O(N^2)#include#include#includeusing namespace std;long long LevelOne(int data[],int maxsize){ long long max=0; for (int i=0;i<maxsize;i++) { int ret=1; for (int j=0;j<maxsize;j++原创 2014-12-23 11:54:23 · 368 阅读 · 0 评论 -
编程之美读书笔记2.14—求数组的子数组之和的最大值
1.最直接的方法,时间复杂度为O(N^2)2.时间复杂度为O(N)。不断的累加每个数组元素,并用一个变量保存当前的最大值,累加的过程一直和该变量进行比对,如果大于最大值,就把当前的最大值保存下来,反复如此就可以求出最大值.#includeusing namespace std;int MaxSum1(int *A,int n){ int maxSum=0; int sum;原创 2014-12-23 20:56:00 · 457 阅读 · 0 评论 -
编程之美读书笔记2.9—斐波那契数列
(1)#include using namespace std;int Fibonacci1(int n)//递归{ if (n==0||n==1) { return n; } else { return Fibonacci1(n-1)+Fibonacci1(n-2); }}原创 2014-12-11 11:44:28 · 392 阅读 · 0 评论 -
编程之美读书笔记2.8—找符合条件的整数
#include#include#includeusing namespace std;const int N=6;void search(){ vector> v; vector temp; temp.clear(); int i,j,k; int number=0; for(i=0;i<N;i++) { v.push_back(temp); } v[1].pu转载 2014-12-11 10:00:31 · 399 阅读 · 0 评论 -
编程之美初赛第二场
#include #include#include#include using namespace std;int main(){int T;int M,N,Q;int temp;vector result; cin>>T; //输入T组数cin>>M>>N>>Q;vector sex(M,0);vector >原创 2015-04-26 16:09:46 · 401 阅读 · 0 评论