请实现一个函数:线段重叠; 
输入多个一维线段,求出这些线段相交的所有区域(也用线段表示);  
一条线段用两个值表示(x0,x1), 其中x1>x0;  
比如:输入线段数组[(2,4),(1.5,6),(0.5,3.5),(5,7),(7.5,9)],

输出线段数组[(1.5,4),(5,6)]

实现代码如下:

float** GetSegmentOverlap(float** array, int nCount,int& OutCount)
{int i;float* temp = new float[nCount * 2];  int* count = new int[nCount * 2];  memset(temp, 0, nCount * 2 *sizeof(float));int nTotalData = 0;for (i = 0; i < nCount; i++) {  for (int j = 0; j < 2; j++){  //temp[i * 2 + j] =  array[i][j];//这里进行排序InsertData(temp, array[i][j], ++nTotalData);count[i * 2 + j] =0;}  }
/*for (i=0; i< (nCount * 2); i++){cout << temp[i] << ",";}cout << endl;
*///Arrays.sort(temp);float x = 0.0;  float y = 0.0;  for (i = 0; i < nCount; i++) {  x = array[i][0];  for (int j = 1; j < nCount; j++) {  y = array[i][j];  for (int k = 0; k < nCount * 2; k++) {  //if (temp[k] >= x && temp[k] < y)  if (temp[k] > x && temp[k] < y)  ++count[k];  }  }  }  list<int*> resultList; int flag = 0;  for (i = 0; i < nCount * 2; i++) {  //if (count[i] > 1 && flag == 0) if (count[i] == 1 && flag == 0){  flag = 1;  resultList.push_back(new int(i));} else if (count[i] > 1 && flag == 1) {  } else if (count[i] == 1 && flag == 1) {  flag = 0;  resultList.push_back(new int(i)); }  }  list<int*>::iterator itorResultList;int k =resultList.size()-1;int* j;if (resultList.size() > 0) {  OutCount = resultList.size()/2;float** result = new float* [OutCount];for (int m=0; m<OutCount; m++){result[m] = new float[2];//new float}for (itorResultList = resultList.begin(); itorResultList != resultList.end(); itorResultList++) {  //for (int j = 0; j < list.size(); j++) //{  // result[i][j] = list.get(j);  //}  j = *itorResultList;//cout << (*j) << ", ";result[k/2][k%2] = temp[*j];k--;//cout << temp[*j] << "," ;//释放内存delete *itorResultList;*itorResultList=NULL;,这样是有问题的。delete j;j=NULL;}  delete[] temp;temp=NULL;delete[] count;count=NULL;return result;  } else  {delete[] temp;temp=NULL;delete[] count;count=NULL;return NULL;}
}/*按降序排列数组*/
int InsertData(float* a, float nValue, int nCount)
{for (int i=0; i<nCount; i++){if (a[i]<nValue){for (int j=nCount-1; j>i; j--){a[j]=a[j-1];}a[i]=nValue;break;//跳出循环}}return 0;
}

有兴趣的朋友可以自己测试一下,仅提供参考。

此算法有点问题,当有相同起点的时候,完善版明天发布。

整型数组处理算法(十一)请实现一个函数:线段重叠(性能优化)。[风林火山]

转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12586443

整型数组处理算法(十一)请实现一个函数:线段重叠。[风林火山]相关推荐

  1. 编写一个函数get_average()获取整型数组元素的平均值。要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值。

    题目内容: 编写一个函数get_average()获取整型数组元素的平均值.要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值.在main()函数中通过具体的一维数组Array ...

  2. 整型数组处理算法(十一)请实现一个函数:线段重叠(性能优化)。[风林火山]

    请实现一个函数:线段重叠;  输入多个一维线段,求出这些线段相交的所有区域(也用线段表示);   一条线段用两个值表示(x0,x1), 其中x1>x0;   比如:输入线段数组[(2,4),(1 ...

  3. 整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]

    请实现一个函数:最长顺子:输入很多个整数(1<=数值<=13), 返回其中可能组成的最长的一个顺子(顺子中数的个数代表顺的长度): 其中数字1也可以代表14: 顺子包括单顺\双顺\3顺: ...

  4. 整型数组处理算法(十三)请实现一个函数:凑14。[风林火山]

    请实现一个函数:凑14: 输入很多个整数(1<=数值<=13),任意两个数相加等于14就可以从数组中删除这两个数,  求剩余数(按由小到大排列):比如:输入数组[9,1,9,7,5,13] ...

  5. Interview:算法岗位面试—10.30上午上海某信息公司(偏图算法)技术面试之单链表反转、给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xcepti

    ML岗位面试:10.30上午上海某信息公司(偏图算法)技术面试之单链表反转.给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xception.推荐算法等 I ...

  6. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

    package demo;import java.util.Arrays;/** 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ //num ...

  7. C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

    1. 题目 请编写一个函数function,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回.主函数中x是数组名,n 是x中的数据个数,max存放最大值,i ...

  8. 华为机试HJ80:整型数组合并

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 将两个整型数组按照升序合并,并且过滤掉重复数组元素. 输出时相邻两数之间没有空格. ...

  9. python fun函数、求4x4整型数组的主对角线元素的和_求一个4×4的整型二维数组主对角线元素之和...

    展开全部 下面是Java语言编写一个计算4*4整型数组对角线636f70793231313335323631343130323136353331333431353338元素和的代码: import j ...

最新文章

  1. C#里的登陆关闭问题。
  2. Cocos2dx 中 倒计时保留2位数写法
  3. t2 初识Tornado
  4. 有关输出图形的代码,我觉得好难啊,好蒙啊。
  5. oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载
  6. android 学习之URI
  7. “DropDownList1”有一个无效 SelectedIndex,因为它不在项目列表中。
  8. Spring源代码地址
  9. APP定制开发之前,这6条铁律要牢记
  10. 分析 OVS 如何实现 vlan 隔离 - 每天5分钟玩转 OpenStack(140)
  11. Gradle构建速度太慢尝试加快方法
  12. 1736. Latest Time by Replacing Hidden Digits
  13. ubuntu自动同步时间
  14. 基于RNN-LSTM模型的诗词生成/TensorFlow
  15. 02) android studio 创建安卓虚拟机,使用虚拟机调试
  16. 期货的暴富逻辑是什么?
  17. python 学习分享之简单的播放音乐1(playsound)
  18. 网站设计风格有很多种,看看哪种适合你?
  19. 收到字节 Offer,月薪 60k*18薪 ,爽的两夜都没睡着!
  20. 给安卓手机里的Firefox安装AdGuard的https过滤证书

热门文章

  1. 使 WIN 10进入休眠、睡眠、关机的命令
  2. 文华财经wh8-trend1组合-保证金20万-最大使用1.8万,年华收益21%,最大回撤9.8%
  3. 如何读取PSD文件(photoshop)的图层......
  4. 649. Dota2 参议院
  5. RuntimeError: ONNX export failed: Couldn‘t export operator aten::to
  6. Linux RHEL7如何开机自动连接网络
  7. [BSidesCF 2020]Had a bad day
  8. 分巧克力 c/c++
  9. VMware安装群晖
  10. 【C语言编程】使用近似值方法求圆周率π的值