![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美
文章平均质量分 50
跑着的程序员
目前就职于国内某大型企业,从事分布式系统的研发工作,欢迎各位牛人交流,QQ:501968942,邮箱:shenganbeiyang@163.com.
展开
-
编程之美 寻找发帖“水王”
描述“ 直接拍照,来得打字此题很容易转换为,在一个数组中,有一个数出现的次数超过了数组元素个数的一半,请找出这个元素。 方法一: 对数组排序进行排序,利用通常的排序方法,复杂度O(nlgn),再遍历一遍数组,找出那个元素,复杂度为O(n),空间复杂度O(1); 方法二: 空间换时间吧,在开辟一个数组,原创 2013-07-08 15:21:36 · 701 阅读 · 0 评论 -
编程之美 求数组中的最长递增子序列
如题,例如:存在数组 1,-1,2,-3,4,-5,6,-7 ,则最长的递增子序列是:1,2,4,6.法一: 蛮力法 int Lis(int* arr,int n){ int iCount=0;//记录子序列的个数 int tmp_count=0; int tmp; for(int i=0;i<n-1;i++) {原创 2013-07-21 12:09:12 · 1171 阅读 · 0 评论 -
编程之美-不要被阶乘吓到
求N!的二进制表示中最低位1的位置。 最简单的莫过于对N!直接移位了,然后找到1的位置。原创 2013-07-05 23:13:37 · 1764 阅读 · 0 评论 -
编程之美- 求二进制数中1的个数
对于一个字节(8bit)的无符号数整型变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能高。 -《编程之美》P119原话。 看到这题,我立刻想到了,我之前写的那个博客求1的个数,应该很简单,果断test一下吧。int func(unsigned char x){ if(x>256) throw "Argument is out of arra原创 2013-07-04 16:35:54 · 601 阅读 · 0 评论 -
编程之美 数组循环移位
设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附件变量。法一: 挨个遍历,每个移动K位,复杂度RightShift(int* arr,int N, int K) { while(K--) { int t=arr[N-1];原创 2013-07-17 16:04:19 · 1106 阅读 · 0 评论 -
编程之美 求数组的子数组之和的最大值
一个有N个整数元素的一位数组(A[0],A[1],A[2],...,A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是什么?比如 -2 5 3 -6 4 -8 6 的最大子数组是 5 3。 法一: 挨个遍历查找:int maximum=-INF;int sum;for(int i=0;i<n;i++){原创 2013-07-16 14:51:40 · 551 阅读 · 0 评论 -
编程之美 快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 法一: 最直接的方法就是,穷举法,复杂度为O(N^2); 法二: 利用sum减去a[i],再查找sum-a[i],是否在数组里,这时候就变成查找了,可利用二分查找;排序的复杂度为O(原创 2013-07-15 15:28:20 · 566 阅读 · 0 评论 -
编程之美 寻找最大的K个数
有很多个无序数,我们姑且假定他们各不相等,怎么挑选出其中最大的若干个数呢? 如果这个数据量很大,比如1亿个,如果所存数据是浮点型呢?我们该怎么处理呢?分两部分,第一部分是我个人的解答,第二部分是书上的解答;第一部分: 1,如果这个问题里的数据都是整数,这个问题利用hash映射应该很简单,就是在开辟一个数组,把原数组里的数据map到新开辟的数组里,如:原数原创 2013-07-10 12:18:40 · 1637 阅读 · 0 评论 -
编程之美 裴波那楔数列
给出如下递推式: 以上就是经典的Fibonacci数列,下面给出递推的解法: int Fibonacci(int n){ if(n<=0) return 0; else if(n==1) return 1; else return Fibonacci(n-1)+Fibonacci(n-2);}原创 2013-07-13 12:08:16 · 801 阅读 · 0 评论 -
编程之美 寻找数组中的最大值和最小值
寻找一个数组里的最大值和最小值法一: 分别遍历一遍,次数O(2*N);法二: 根据书上的讲述, 法三: 主要在法二的基础上改进,法二改变了原数组,法三主要是不改变原数组,定义两个变量MAX和MIN,分别保存最大值和最小值。法四: 分治法,这是重点。typedef struct{ int MAX;原创 2013-07-13 17:33:32 · 956 阅读 · 0 评论 -
编程之美 1的数目
给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有”1“的个数。 解法一:穷举法,遍历1到Nd每一个数,计算其1的个数;虽然笨,但是想不出其他方法就这样了; 解法二:分类讨论,分别讨论个位,十位和百位...上1能出现的次数。 以233 为例子:个位 为1时,存在的数字有:1,11,21,...91,101,...231,共24个,原创 2013-07-08 23:00:49 · 886 阅读 · 0 评论 -
编程之美 计算字符串的相似度
许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a“替换为"b"); 2.增加一个字符(如把"abdd"变为"aebdd"); 3.删除一个字符(如把"travelling"变为"traveling")。比如,对原创 2013-07-22 11:53:54 · 1157 阅读 · 0 评论