随笔分类 -  编程之美代码实现

编程之美2.16——求数组中最长递增子序列
摘要:如:1,-1,2,-3,4,-5,6,-7中,最长递增子序列是1,2,4,6.【解法1】假设在目标数组array[]的前i个元素中,最长递增子序列的长度为LIS[I],那么对于任意karray[k]时,LIS[i+1]=LIS[K]+1,否则LIS[i+1]=1。此法特点:在考虑第i+1个元素的时候... 阅读全文

posted @ 2015-06-04 16:27 EmmaLi 阅读(170) 评论(0) 推荐(0)

编程之美2.13——子数组的最大乘积
摘要:给定义个长度为N的整数数组,只允许用乘法,不能用除法,计算在任意(N-1)的个数的组合中乘积最大的一组。【思路】突然变成了雅黑,挺不习惯的~~还是雅黑好看✪ω✪实现起来很简单,但我是不会想到这样的思路的……看来除了积累别想着有别的途径来提高了π__π1.用空间换时间,开数组s和t,分别保存从前向后的... 阅读全文

posted @ 2015-05-21 15:41 EmmaLi 阅读(472) 评论(0) 推荐(0)

编程之美2.8——找符合条件的整数
摘要:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0.如N=3,M=39,N*M=111。【思路】这么难的思路打死我也想不到.@_@|||||..将题目转换为,求一个数X,使得X%N=0且X的十进制表示只含有1和0.维护一个“余数数组”,对于从0到N-1的每... 阅读全文

posted @ 2015-05-19 16:06 EmmaLi 阅读(515) 评论(0) 推荐(0)

编程之美2.7——最大公约数
摘要:求两数最大公约数。【思路】1.常规:设求最大公约数算法为f(m,n),则f(m,n)=f(n,m%n)(m>n>0).当n==0时,返回m原理:x=ky+b,则f(x,y)=f(y,b)。缺点:除法或取余运算代价较大2.用减法替代取余。即f(m,n)=f(n,m-n)(m>n>0).缺点:增加了迭代... 阅读全文

posted @ 2015-05-19 09:34 EmmaLi 阅读(291) 评论(0) 推荐(0)

编程之美2.5——寻找最大的K个数
摘要:一列数中寻找最大K个数。【思路】1.常规思路,排序,数前K个数。缺点:时间O(nlogn),总个数n和k差距大的时候,比如k=1,很不实用。如果k src, vector& s1, vector& s2){ int len=src.size(); int p=src[rand()%len... 阅读全文

posted @ 2015-05-15 14:51 EmmaLi 阅读(283) 评论(0) 推荐(0)

编程之美2.4——计算1的个数
摘要:计算从1到整数N之间的所有整数,1出现的次数。记为f(N).比如12:1,10,11,12 1出现5次。【思路】1.常规解法,先计算任意一个整数N中所含的1的个数,比如13含1个1,然后再套一个从1到N的循环,计算每个数出现1的次数。2.总结规律。f(N)=个位出现1的个数+十位出现1的个数+百位出... 阅读全文

posted @ 2015-05-14 15:56 EmmaLi 阅读(267) 评论(0) 推荐(0)

编程之美2.3——寻找水军(抵消法)
摘要:1.在数组中寻找出现次数超过一半的一个元素。2.在数组中寻找出现次数超过1/4的三个元素。【思路】1)常规做法:先将数组排序,时间O(nlogn);再遍历一次,统计每个元素出现的次数,得到题目要求。2)时间O(n)的做法:抵消法。对于第一题,每次抵消两个不同的数,剩下的数组主元素出现次数还是超过一半... 阅读全文

posted @ 2015-05-14 11:10 EmmaLi 阅读(459) 评论(0) 推荐(0)

编程之美2.14——求和最大子数组
摘要:这里记录的是从《算法导论》看来的解法,待补充。【解法1】——递归,二分将数组分成左右两边,最大子数组出现的情况可能有:1)左半边2)右半边3)跨左右两边对于半边求最大子数组,又可以递归上述思维,所以难点在于写出跨左右两边的情况。代码:void find_max_cross_subarray(int ... 阅读全文

posted @ 2015-04-29 08:32 EmmaLi 阅读(147) 评论(0) 推荐(0)

导航