博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遇到的几个算法题
阅读量:5150 次
发布时间:2019-06-13

本文共 1776 字,大约阅读时间需要 5 分钟。

1、如何快速求得与某个数平方根最接近的整数

数学上平方根一般由级数展开求得。但是此处只求其近似整数,用二分查找法,复杂度为Log(N)。

2、有一个几个T的大文件,记录了若干价格记录,需要累加计算总价,如何算。现在计算机内存有限。

使用Java内存映射文件 java.nio.MappedByteBuffer ,比java.io.BufferedInputStream 快很多

3、有若干个大文件,里面保存了各个URL的访问记录,顺序是乱的,要求将各个URL 访问的记录数量汇总。计算机内存很小。

将文件的记录重新按照URL的HashCode范围重新写入到若干个文件中,若是其中某个文件依旧太大,再将该文件拆分。这样相同URL只会在同一个文件中。

4、有一个数列0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,......, 给出数列下标,求出该下标对应元素

注意,这是fibonacci数列,其通项为:A(n)=A(n-1)+A(n-2) .用一个循环就可以求出,不要用递归,递归会重复计算。

for(int i=2; i<=n;i++ ){      A[n] = A[n-1] + A[n-2];}

5、给定一串整数,找出其中和最大的连续子数列,包括子数列的位置和最大和。

http://blog.csdn.net/lilypp/article/details/6124871

线性算法:

这个算法是基于两个结论得来的:

(1)、如果数列A的某个子列A(i, j) 的和S(i, j) < 0, i< j<q,那么A(i, q)  肯定不是数列A的最大递增子列。

S(i, q) = S(i, j) + S(j+1, q) < 0 + S(j+1, q) = S(j+1, q)

这个结论说明,从位置 i 开始的子列,一旦遇到和为0的子列,后面可以不搜索了,直接从 j+1 开始重新计算。
 (2)、如果A(i, j) 是数列A以 i 起始的子列中第一个和S(i, j) < 0 的,则对任意 i <= p <= j, p<= q,A(p, q) 的和 S(p, q) 要么小于最大连续子列和,要么与现存的最大连续子列和相等。所以A(p, q)序列可以跳过。
 因为S(i ,j) 是第一个<0 的,所以S(i, p-1)必然>=0,则 S(p, q) = S(i, q) - S(i, p-1) <= S(i, q)

- 当 q > j 时,由结论1得知, S(i, q) < S(j+1, q),则 S(p, q) < S(j+1, q)

- 当q <= j 时,(这个暂时不会证明。。。)
//o(n)void MaxSubSet_2(int nums[], int length){	if (length == 0)		return;	int start = 0;	int sum = nums[0];	int maxStart = 0;	int maxEnd = 0;	int maxSum = nums[0];		for (int i = 1; i < length; i++)	{		sum += nums[i];		if (sum > maxSum)		{			maxStart = start;			maxEnd = i;			maxSum = sum;		}		if (sum < 0)		{			start = i + 1;			sum = 0;		}	}	cout << "Max: " << maxSum << " ( " << maxStart << ", " << maxEnd << " )" << endl;}

6、有100步楼梯,每次走1步或两步 问有多少走法

上到第n级共有a(n)种方法

那么:a(1)=1,a(2)=2,a(3)= a(2)+1=3,a(4)=a(3)+ a(2) .....

上到第n级有两种情形

①从第n-1级上1步
②从第n-2级上2步(不能上1步,否则与第一种情形重复)

a(n)=a(n-1) + a(n-2)  ...

又是一个 fibonacci数列

转载于:https://www.cnblogs.com/leeeee/p/7276165.html

你可能感兴趣的文章
图文说明Win10上在VitualBox安装Ubuntu
查看>>
C#终于支持可选参数了!
查看>>
帮朋友写的一个自定义选择框
查看>>
CODE[VS] 2221 搬雕像 ——2011年台湾高级中学咨询学科能力竞赛
查看>>
团队冲刺第七天
查看>>
Chrome中的类似Firebug的开发者工具
查看>>
数据结构与算法之--简单排序:冒泡、选择和插入
查看>>
使用dispatch_once实现单例
查看>>
python各模块组合实例
查看>>
【LOJ】#2128. 「HAOI2015」数字串拆分
查看>>
第二阶段--团队冲刺--第四天
查看>>
powershell 操作sharepoint命令集
查看>>
2ge ListBox 之间的 上下选择,MVC ViewModel
查看>>
codevs1314 寻宝
查看>>
POJ 3083 Children of the Candy Corn(DFS + BFS)
查看>>
Java使用ZXing生成/解析二维码图片
查看>>
4.8日学习打卡
查看>>
在linux中文件的权限讲解
查看>>
(最小生成树)Constructing Roads -- poj -- 2421
查看>>
css3画半圆
查看>>