查找数组中是否含有任意三元素组成三角形的算法
2009-05-07 15:00
330 查看
这是本人今天去Exoweb上机笔试的题目, 最笨最原始的办法是三重循环.
当然好的设计是必要的.
我所想的方法是分治法,先把数组以a[i]为界分成两部分,左边比a[i]小,右边比a[i]大.
接下来问题就变成了两个子问题了,左右两个子数组,再加上下面的三种情况
(i) 左面数组取一个数,右面数组取一个数,a[i]三个数判断;
(ii)左面取两个数与a[i]判断
(iii)右面取两个数与a[i]判断
那么问题T(n) = 2T(n/2) + f(n),其中f(n)复杂度为O(n^2),总程序时间复杂度为O(n^2)
先写一个判定组成三角开的函数
再写一个分堆函数,即快速排序里的前一步
最后递归函数
主函数调用
当然好的设计是必要的.
我所想的方法是分治法,先把数组以a[i]为界分成两部分,左边比a[i]小,右边比a[i]大.
接下来问题就变成了两个子问题了,左右两个子数组,再加上下面的三种情况
(i) 左面数组取一个数,右面数组取一个数,a[i]三个数判断;
(ii)左面取两个数与a[i]判断
(iii)右面取两个数与a[i]判断
那么问题T(n) = 2T(n/2) + f(n),其中f(n)复杂度为O(n^2),总程序时间复杂度为O(n^2)
先写一个判定组成三角开的函数
int valid(int a,int b,int c) { return a+b>c && a+c>b && b+c>a; }
再写一个分堆函数,即快速排序里的前一步
int partion(int * a,int p,int q) { int i,j; for(i = p-1,j = p;j<q;++j) { if(a[j] < a[q] && a[++i]> a[q]) swap(&a[i],&a[j]); } swap(&a[i+1],&a[q]); return i+1; }
最后递归函数
int subtri(int * a,int p,int q) { int mid; if(q-p+1 < 3)return 0; mid = partion(a,p,q); if(subtri(a,p,mid-1)||subtri(a,mid+1,q))return 1; else { int l,r; for(l = p;l<mid;l++) for(r = mid+1;r <= q;++r) { if(valid(a[r],a[l],a[mid]))return 1; } for(l = p;l<mid;l++) for(r = p;r<mid;r++) { if(r != l && valid(a[r],a[l],a[mid]))return 1; } for(l = mid+1;l<=q;l++) for(r = mid+1;r<=1;r++) { if(r != l && valid(a[r],a[l],a[mid]))return 1; } } return 0; }
主函数调用
int main() { int a[] = {4,4,1,2,3,5,7,8,9}; printf("%d",subtri(a,0,8)); return 0; }
相关文章推荐
- 查找数组中是否存在任意三个数可组成三角形的算法
- 查找二维排序数组中是否含有某个元素
- 算法题目三:判断数组中任意三条边能否组成一个三角形,若能返回1,不能返回0
- Jvva中如何高效判断数组中是否含有某个元素
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 判断数组中是否含有某元素
- 字符串算法——查找数组中多数元素(Majority Element)
- 解析php二分法查找数组是否包含某一元素
- 【算法】找出两个已序数组,是否含有相同的数字
- 算法代码:查找数组中第i小的元素
- 从“比较两个含有多个不同元素的集合是否相同”引申出的几种算法
- Java 旋转数组查找旋转点和任意元素(元素可重复)
- 关于一个查找数组中是否存在某一个元素的问题
- js中比较两个数组中是否含有相同的元素,可去重,可删除合并为新数组
- js数组插入指定位置元素,删除指定位置元素,查找指定位置元素算法
- 请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同
- KT学算法(二)——循环有序数组查找指定元素
- 字符串算法——查找数组多数元素(Majority Element II)
- [算法]行列递增数组中查找某个元素
- 算法学习之数组元素查找