早教吧作业答案频道 -->其他-->
已知有序数列A[1..n]和一个正整数x,设计一个复杂度为O(n)的算法,判断A中是否有两个元素它们的和是x。数列中若是整数我会做,但若是分数该如何求解呢?我的整数解法是用空间换时间,
题目详情
已知有序数列A[1..n]和一个正整数x,设计一个复杂度为O(n)的算法,判断A中是否有两个元素它们的和是x。
数列中若是整数我会做,但若是分数该如何求解呢?
我的整数解法是用空间换时间,就是用x减去所有大于x/2的数,得出结果放在一个大小为[x/2]的数组a中,其值与数组中的位置对应,若有此值,则数组相应位置设为1,然后遍历小于x/2的数,对数m,若数组中对应位置a[m]为1,则返回true,若没有一个对应位置为1,则为false...
数列中若是整数我会做,但若是分数该如何求解呢?
我的整数解法是用空间换时间,就是用x减去所有大于x/2的数,得出结果放在一个大小为[x/2]的数组a中,其值与数组中的位置对应,若有此值,则数组相应位置设为1,然后遍历小于x/2的数,对数m,若数组中对应位置a[m]为1,则返回true,若没有一个对应位置为1,则为false...
▼优质解答
答案和解析
你的算法不够好,如果整数很大(比如都是10亿以上),你哪有那么大的内存去开数组呢?
有一个算法是:
建立两个指针p,q,p指向数组第一个元素,q指向数组最后一个元素,[p]表示p内容,算法可以写成:
while(p x)
break;
}
q--;
}
return false;
数组每个元素最多只被p,q一个指针扫描一次,所以总时间复杂度O(N),而且数组元素可以为任意类型
有一个算法是:
建立两个指针p,q,p指向数组第一个元素,q指向数组最后一个元素,[p]表示p内容,算法可以写成:
while(p x)
break;
}
q--;
}
return false;
数组每个元素最多只被p,q一个指针扫描一次,所以总时间复杂度O(N),而且数组元素可以为任意类型
看了 已知有序数列A[1..n]和...的网友还看了以下:
如果不认识“悯”,应用什么查字法,查——部,然后查——画,如果知道这个字的读音,但不知其仪可用——查 2020-03-30 …
法是有严格的程序规定的规范,具有程序性.那么什么是程序性?法是强调程序、规定程序和实行程序的规范. 2020-04-27 …
matlab中牛顿法程序我手里有两个牛顿迭代法的程序,但是两种程序计算出来的数值有误差,而我又对数 2020-05-17 …
1. 说明什么是构造方法,构造方法有哪些特点?2. 如果程序中有多个类时,如何来确定源程序文件的名 2020-05-17 …
数据结构的题目,对单链表中的元素按插入排序法排序的算法如下,其中L为链表头节点指针.请填空完成其功 2020-05-17 …
如果在待排序序列中有两个元素具有相同的值,排序使它们的位置发生颠倒,则称该排序算法是不稳定的 2020-05-24 …
移进--归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于()的语法 2020-05-26 …
● 堆是一种有用的数据结构,堆排序是一种选择排序,它的一个基本问题是如何造堆,常用的建堆方法是 2020-05-26 …
程序后死机,鼠标和键盘都没有反应,这种情况说明程序占用了已分配给鼠标和键盘的系统资源,如果想结束这种 2020-05-31 …
一个冠词问题冠词用法“在序数词前加定冠词”例如iamthelasttocome但是今天又看到另一个 2020-06-04 …