题目如下
有a1和a2都是为无符号数组,al1和al2为数组的长度,数组的长度为偶数。无符号数组有一对数字区间组成。
例如:a1={0,1,3,6,10,20,4,5};
a2={0,1,20,30,50,4,5};
其中:a1表示为下区间[0,1],[3,6],[10,20],[4,5];
a2标示为下区间[0,1],[20,30],[35,0],[4,5];
则:计算a1和a2重叠的下区间个数。例如:a1和a2重叠下区间为[0,1][4,5]个数为2。
下面实现算法,计算1000000数组下区间重叠出现个数用时为90ms左右。
package com.demo; import java.util.Random; /** * 有a1和a2都是为无符号数组,al1和al2为数组的长度,数组的长度为偶数。 * 无符号数组有一对数字区间组成,例如: * a1={0,1,3,6,10,20,4,5} * a2={0,1,20,30,50,4,5} * 则: * a1表示为下区间[0,1],[3,6],[10,20],[4,5] * a2标示为下区间[0,1],[20,30],[35,0],[4,5] * 计算a1和a2重叠的下区间个数。例如:a1和a2重叠下区间为[0,1][4,5]个数为2. * 下面实现算法,计算1000000数组下区间重叠出现个数用时为90ms左右。 * * @author ChenGang */ public class Demo01 { /** * @param args */ public static void main(String[] args) { long time1 = System.currentTimeMillis() ; int num = 1000000 , len = 1000000 ; //声明数组 int[] num1 = randomArray(num,len) ; num1 = new int[]{0,1,3,6,10,20} ; System.out.println(String.format("生成数组num1用时:%dms",System.currentTimeMillis()-time1)); int[] num2 = randomArray(num,len) ; num2 = new int[]{0,1,20,50,4,5} ; System.out.println(String.format("生成数组num2用时:%dms",System.currentTimeMillis()-time1)); quickSort(num1); System.out.println(String.format("对数组num1排序用时:%dms",System.currentTimeMillis()-time1)); quickSort(num2); System.out.println(String.format("对数组num2排序用时:%dms",System.currentTimeMillis()-time1)); System.out.println(String.format("计算num1和num2重复出现成对数字个数 %d 。", excLogic(num1,num2))); System.out.println(String.format("计算num1和num2重复出现成对数字个数用时:%dms",System.currentTimeMillis()-time1)); } /** * 计算下区间个数逻辑处理 * @param _arr1 * @param _arr2 * @return */ private static int excLogic(int[] _arr1 , int[] _arr2){ int num = 0 , count=0 , idx1=0 , idx2=0 ; int[] arr1 = null , arr2 = null ; if(_arr1.length >= _arr2.length){ arr1 = _arr1 ; arr2 = _arr2 ; } else{ arr1 = _arr2 ; arr2 = _arr1 ; } while(idx1 < arr1.length){ if(idx2>=arr2.length){ break ; } if(arr1[idx1]==arr2[idx2]){ count++ ; idx1++ ; idx2++ ; } else{ if(count<2){ idx1=idx1<=0?0:idx1-1 ; idx2=idx2+1 ; } else{ if(idx1%2==0){ idx2=idx2+2; } else{ idx1=idx1<=0?0:idx1-1 ; idx2=idx2+1 ; } num = num+count/2 ; } count=0 ; } } if(count>0){ num = count/2 ; } return num ; } /** * 构造随机数数组 * @param num * @return */ private static int[] randomArray(int num , int len){ java.util.Random random = new Random() ; int[] arr = new int[len] ; for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(num) ; } return arr ; } public static void quickSort(int[] a) { _quickSort(a,0,a.length-2) ; } /** * 对数组进行特殊化排序 * @param arr * @return */ private static void _quickSort(int[] a, int lo0, int hi0) { int i = lo0 , j = hi0; if (i >= j) return; //确定指针方向的逻辑变量 boolean flag=true; while (i != j) { if (a[i] > a[j] || (a[i]==a[j] && a[i+1]>a[j+1])) { //交换数字 int temp1 = a[i]; int temp2 = a[i+1]; a[i] = a[j]; a[i+1] = a[j+1]; a[j] = temp1; a[j+1] = temp2; flag = (flag == true) ? false : true; } //将指针向前或者向后移动 if(flag) j=j-2; else i=i+2; } //将数组分开两半,确定每个数字的正确位置 i=i-2; j=j+2; _quickSort(a, lo0, i); _quickSort(a, j, hi0); } }
相关推荐
c语言入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。hello,world #include<stdio.h> int main() { /*在双引号中间输入Hello World*/ printf("Hello World"); return 0; } 注:在最新的C标准中,main函数前的类型为int而不是void c语言的具体结构简单来说,一个C程序就是由若干头文件和函数组成。#include <stdio.h>就是一条预处理命令, 它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。函数就是实现代码逻辑的一个小的单元。必不可少之主函数一个C程序有且只有一个主函数,即main函数。C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数,这里
部门绩效考核表模板(基于KPI,以月度为例1)
基于YOLOv5的移动机器人动态视觉SLAM算法研究.pdf
基于二阶锥优化的电气综合能源系统协调调度策略研究与仿真——利用MATLAB及CPLEX平台精准求解,MATLAB代码:基于二阶锥优化电气综合能源系统优化调度研究 关键词:电气综合能源 优化调度 二阶锥优化 参考文档:《考虑气电联合需求响应的气电综合能源配网系统协调优化运行_刘天琪》参考部分配电网设备模型,非完全复现,具体以店主自写文档为准 仿真平台:MATLAB+CPLEX 平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是电气综合能源系统的优化调度策略,气网部分和电网部分的相关约束都通过二阶锥或者其他线性化的方法进行化简,模型清晰且容易求解,经过化简后采用CPLEX实现求解,可以在此基础上扩加储能、SVG、OLTC以及电容器等相关设备,升级版的程序店主也有,该代码适合新手学习以及在此基础上进行拓展,代码质量非常高,保姆级的注释以及人性化的模块子程序,所有数据均有可靠来源 ,基于二阶锥优化的电气综合能源系统优化调度MATLAB代码研究
春节主题作文素材 初中语文主题学习 2025年01月21日 20:26 山西 写年味 开头:新年的脚步渐近,街头巷尾瞬间被年味填满。大红灯笼高高挂起,恰似熟透的红柿子,在风中轻晃,透着喜庆。街边店铺张贴着崭新春联,墨香在空气中氤氲。年货摊前人头攒动,吆喝声、谈笑声交织。孩子们手持糖葫芦,欢笑着穿梭其中,那鲜艳糖衣与红彤彤脸蛋相映,年味愈发浓郁,似要将寒冬暖化 。 结尾:置身这浓烈年味里,我沉醉不已。它是团圆温馨,是对过往的怀念、对未来的期许。当烟花在夜空绽放,那光亮如同希望之火。愿这份年味永不消散,伴我们走过岁岁年年,让温暖与幸福在生活中延续 。 满分作文题目: 《灯火映新岁,年味满人间》 《街头巷尾,年味悠长》 《大红灯笼,摇曳年味时光》 《墨香春联,晕染年味画卷》 《糖葫芦串起的年味》 开头:记忆深处,年味是外婆手中的剪纸。每至腊月,外婆便戴上老花镜,坐在暖阳下,手中红纸在剪刀下翻转,不一会儿,栩栩如生的花鸟鱼虫便跃然纸上。她脸上慈祥笑容,和着剪纸独特艺术魅力,成为我对年味最初印象。如今,外婆已年迈,可那份年味记忆,从未淡去 。 结尾:重拾外婆剪纸,往昔春节场景浮现
dbeaver离线安装版。(数据库管理工具dbeaver-ce-23离线驱动+安装包+使用说明) 内置sqlserver、mysql、oracle、opengauss数据库。可满足日常使用。
基于LEBERT-CRF和知识图谱的中文地址修正补全方法.pdf
比较全面、系统地反映了历年全国教育经费来源和使用的情况,为国家和地方编制教育发展规划制定教育财政政策提供了重要的参考依据。它对于研究教育经费结构和使用效益有一定价值对于各地之间的情况交流,提高教育财务管理水平,也将会起到促进作用。 全国教育经费统计资料的各项数据是从最基层单位开始填报,经过乡(镇)、县(市、区)、地(市)、省(自治区、直辖市)等教育主管部门层层汇总的。
1、文件内容:apache-commons-lang-javadoc-2.6-15.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-lang-javadoc-2.6-15.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于向量特征的车辆轨迹预测.pdf
1、文件内容:apache-rat-plugin-0.8-13.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-rat-plugin-0.8-13.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
2023年全国大学生英语竞赛样题(C类)
惯导里程计GPS组合导航算法下的卡尔曼滤波matlab代码实现与性能优化,惯导里程计GPS组合导航算法,matlab代码卡尔曼滤波 ,核心关键词:惯导里程计; GPS组合导航算法; 导航算法; MATLAB代码; 卡尔曼滤波。,"基于Matlab的惯导里程计与GPS组合导航算法的卡尔曼滤波实现"
2023年全国大学生英语竞赛样题(C类)样题答案及听力原文
1、文件内容:ant-apache-log4j-1.9.4-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ant-apache-log4j-1.9.4-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
44 -生产车间主任绩效考核表1
交叉编译工具:aarch64-linux valgrind软件版本:3.24.0 使用时添加环境变量: export VALGRIND_LIB=/opt/aarch64_build/libexec/valgrind export PATH="/opt/aarch64_build/bin":$PATH
01-【标准制度】绩效考核体系(附全套流程)
酒店前厅客房主管晋升考核表