算法导论——集合S是否存在两个元素相加之和等于x
来源:互联网 发布:电路仿真软件j 编辑:程序博客网 时间:2024/06/10 15:21
算法伪代码:
FindX(S,x){
//输入S[1…n],x;输出true或false
//首先对S进行归并排序
mergeSort(S)
//对于排好序的数组S中每个元素,通过二分查找,判断S的剩余元素中是否存在相加为X的情况(转化为查找x-A[i]的方式)
fori <- 1 to length[S] do{
if(binarySearch(S,1,length[S],x-S[i])!= i)
retrun true
}
returnflase
}
java实现:
public class TestFindX{public static void main(String[] args){int[] intArray = new int[100];for(int i = 0;i < 100;i++){intArray[i] = (int)(Math.random() * 100);System.out.print(intArray[i] + " ");}int x = (int)(Math.random() * 100);System.out.println("\n该集合是否存在两个元素相加之和等于" + x + "? " + findX(intArray,x));}public static boolean findX(int[] A,int x){//首先对数组A进行归并排序mergeSort(A,0,A.length - 1);//对于排好序的数组A中每个元素,通过二分查找,判断A的剩余元素中是否存在相加为X的情况(转化为查找x-A[i]的方式)int j;for(int i = 0;i < A.length;i++){j = binarySearch(A,0,A.length,x-A[i]);if(j != i && j >= 0)return true;}return false;}public static void mergeSort(int[] A,int p,int r){//递归划分至只含一个元素,然后进行合并if(p < r){int q = (p + r) / 2;mergeSort(A,p,q);mergeSort(A,q+1,r);merge(A,p,q,r);}}//合并分别已经排好序的A[p...q]和A[q+1...r]public static void merge(int[] A,int p,int q,int r){int n1 = q - p + 1;int n2 = r - q;//新建两个副本数组L、R分别用于拷贝A[p...q]和A[q+1...r]int[] L = new int[n1 + 1];int[] R = new int[n2 + 1];int i,j;for(i = 0;i < L.length - 1;i++)L[i] = A[p + i];for(j = 0;j < R.length - 1;j++)R[j] = A[q + 1 + j];//将数组L、R的最后一个值设为无穷大作为哨兵L[n1] = Integer.MAX_VALUE;R[n2] = Integer.MAX_VALUE;//从左至右分别比较数组L、R,并将较小值依次放回A[p...r]中i = 0;j = 0;for(int k = p;k <= r;k++){if(L[i] <= R[j])A[k] = L[i++];else A[k] = R[j++];}}public static int binarySearch(int[] A,int low,int high,int x){int i = 0;while(low < high){i = (low + high) / 2;if(x == A[i]) return i;else if(x > A[i])low = i + 1;elsehigh = i - 1;}return -i -1;}}
运行结果:
阅读全文
0 0
- 算法导论——集合S是否存在两个元素相加之和等于x
- 算法入门---判断集合S中是否存在两个其和等于x的元素
- 算法入门---判断集合S中是否存在两个其和等于x的元素
- 算法学习笔记----判断集合S中是否存在有两个其和等于x的元素
- 判断集合S中是否存在两个其和等于x的元素
- 【算法导论学习-005】整数集合S中是否存在两个数等于给定的一个整数
- 算法导论 2.3-7 给出一个运行时间为⊙(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素
- 集合S中是否存在两个元素使它们的和等于另外一个整数
- 判断序列中是否存在两个元素之和为x,时间复杂度O(nlgn),算法导论练习2.3,linux纯C实现
- 「算法导论」:课后习题2.3-7求集合S中是否有两个元素的和为X
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- 判断数组中是否存在两数之和等于X
- 描述一个运行时间为Θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
- 2.3-7 描述一个运行时间为Θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
- 有序整型数组A,判断A中是否存在两个数之和等于X,时间O(n)
- 给出一个实数集合和一个实数,怎样判断集合中是否存在两个和等于该实数的元素
- 第一篇博客
- 第二周项目3(2)---汉诺塔程序
- RPC框架调用过程详解
- 算法——使用递归解决组合问题
- bootstrap时间控件
- 算法导论——集合S是否存在两个元素相加之和等于x
- NOI模拟:第k大(点分治)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- javaWEB乱码根源于解决方法
- POJ 2411 Mondriaan's Dream 轮廓线动态规划,插头dp,滚动数组
- Python网络编程
- 逻辑卷管理员(Logical Volume Manager)介绍
- Mac安装、配置Maven
- 数论-HDU5974