「java区间算法」数据区间划分算法
本篇文章给大家谈谈java区间算法,以及数据区间划分算法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据
- 2、java 算法 求 区间 之间的间断值之和
- 3、Java实现在区间【a,b】内找出一些数满足可以被一个整数c整除,统计区间内一共有多
- 4、java 统计数字所属区间
- 5、java入门 排序问题 指定区间排序Arrays.sort(ar,0,n)
- 6、java能用算法实现找到这条线最大的跌幅的区间吗?
java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据
集合分组统计处理, 实现的方法很多,简单的写几种方法供参考;(理解后,自行扩展完善)
方法一:(Java8流处理粗略版) 该版本存在的问题:有些区间没有数据,就不打印显示该区间
import java.util.*;
import java.util.stream.*;
public class NumberDemo {
public static void main(String[] args) {
ArrayListInteger list = new ArrayListInteger();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i numbers; i++) {
list.add(rd.nextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayListInteger list, int space) {
// 使用流处理 把 数字分组
MapString, ListInteger map = list.stream().collect(Collectors.groupingBy((num) - {
return "区间:[" + num / space * space + "," + (num / space + 1) * space + ")";// 分组规则
}));
map.forEach((k,v)-{
System.out.println(k);
System.out.println("\t"+v.size()+"个数据");
});
}
}
方法二:(Java8流处理详细版) 就算有的区间是0个数据,照样打印出来
import java.util.*;
import java.util.stream.*;
public class NumberDemo2 {
public static void main(String[] args) {
ArrayListInteger list = new ArrayListInteger();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i numbers; i++) {
list.add(rd.nextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayListInteger list, int space) {
// 使用流处理 把 数字分组
MapInteger, ListInteger map = list.stream().collect(Collectors.groupingBy((num) - {
return num / space;// 分组规则
}));
// 获取集合里的最大值
OptionalInteger maxop = list.stream().collect(Collectors.maxBy(Integer::compareTo));
int max = maxop.orElse(0);
// 计算出区间的数量
int groups = max % space == 0 ? max / space : max / space + 1;
// 打印结果
for (int i = 0; i groups; i++) {
System.out.println("区间:[" + i * space + "," + (i + 1) * space + ")");
System.out.println("\t有" + (map.get(i)==null?0:map.get(i).size()) + "个数据");
// System.out.println("\t"+map.get(i));//把数据打印出来
}
}
}
方法三:(比较传统的方法)
import java.util.*;
public class NumberDemo3 {
public static void main(String[] args) {
ArrayListInteger list = new ArrayListInteger();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
//给集合里添加数字
Random rd = new Random();
for (int i = 0; i numbers; i++) {
list.add(rd.nextInt(5000)); // 集合里每个数字的范围是0~4999
}
fun(list,space);
}
private static void fun(ArrayListInteger list, int space) {
Collections.sort(list);//排序
int max= list.get(list.size()-1);//取得最大值
int groups = max % space == 0 ? max / space : max / space + 1;//取得区间的数量
HashMapInteger,ArrayListInteger map=new HashMapInteger, ArrayListInteger();//存区间和该区间的数字
for (int i = 0; i groups; i++) {
map.put(i, new ArrayList());
}
//把元素添加到指定的区间
for (int i = 0; i list.size(); i++) {
map.get(list.get(i)/space).add(list.get(i));
}
//打印结果
for (int i = 0; i groups; i++) {
System.out.println("区间:[" + i * space + "," + (i + 1) * space + ")");
System.out.println("\t有"+ map.get(i).size()+"个数据");
//System.out.println("\t"+map.get(i));//把数据打印出来
}
}
}
测试效果如下
区间:[0,1000)
有5个数据
区间:[1000,2000)
有0个数据
区间:[2000,3000)
有1个数据
区间:[3000,4000)
有2个数据
区间:[4000,5000)
有2个数据
java 算法 求 区间 之间的间断值之和
首先我认为你需要一个区间之间的合并操作,假设你有一个区间类,成员变量有上限和下限,为这个区间类增加一个合并函数,比如(1,5)和(2,4)就合并为(1,5),如果是(1,5)和(2,6)就合并为(1,6)。
当然这里涉及一个不能合并的区间,也就说,这个合并函数具有返回值boolean,返回值表示能否成功合并,不能要返回false。
然后,算法的输入肯定是一个区间数组,数组里是所有的区间。在算法中维护一个新数组,这个数组把能合并的区间都合并在一起,新数组中要保证任意两个区间都是不能合并的,也就是说,遍历输入的数组的每一个区间,在新数组中寻找一个可以合并的区间,如果找不到,则在新数组中单独占一个位置,在每进行一次成功的合并之后,都要搜索新数组,保证新数组的不可合并性。
最后,当搜索输入数组完毕,新数组也建立成功后,再分别计算每个新数组中区间的间断值再求和就是结果了。
Java实现在区间【a,b】内找出一些数满足可以被一个整数c整除,统计区间内一共有多
class ForTest3
{
public static void main(String[] args)
{
int count = 0;
for(int x=1; x=100; x++)
{
if(x%7==0)
//System.out.println("x="+x);
count++;
}
System.out.println("count="+count);
/*
计数器思想。
通过一个变量记录住数据的状态变化。
也许通过循环完成。
*/
这是一个例子 你改改
java 统计数字所属区间
int array[] = {1,2,101,220,1100,2300,1,10,230,220,2,1100};
int arr2[]=null; //用数组存储array数组元素在各个区间个数
int max=0;//初始化最大值;
//循环把数组最大值找出来
for (int i = 0; i array.length; i++) {
if(array[i]max){
max=array[i];
}
}
System.out.println("max:"+max);
//计算区间个数,如何最大值不能整除100 要增加一个区间
if(max%100!=0){
arr2=new int[(max/100+1)];
}else{
arr2=new int[(max/100)];
}
//循环array数组元素
for (int i = 0; i array.length; i++) {
//循环arr2数组
for (int j = 0; j arr2.length; j++) {
//判断array数组元素 在那个区间段
if(array[i]=j*100+1 array[i]=(j+1)*100 ){
arr2[j]++;
}
}
}
for (int i = 0; i arr2.length; i++) {
if(i==max/100){
System.out.println("["+((i*100)+1)+"-"+(max)+"]:"+arr2[i]);
}else{
System.out.println("["+((i*100)+1)+"-"+((i+1)*100)+"]:"+arr2[i]);
}
}
随便写的,你尝试下吧
java入门 排序问题 指定区间排序Arrays.sort(ar,0,n)
for(int i=0;in;i++)
{
ar[i]=cin.nextInt();
Arrays.sort(ar,0,n); //原因出在这句的位置,等于每输入1个数字就排序1次n个数
/*
5 //输入5个数
输入 9 2 1 3 5 变成
9(前5个排序) 2(前5个排序) 1(前5个排序) 3(前5个排序) 5(前5个排序)
在9输入后数据为[9,0,0,0,0...0,0,0] ,把前五个排序得[0,0,0,0,9,0...0,0]*/
for(int i=0;in;i++)
{
ar[i]=cin.nextInt();
}
Arrays.sort(ar,0,n);//改到for之外才符合设计意图
接下来都错了
}
java能用算法实现找到这条线最大的跌幅的区间吗?
最大跌幅应该是16,区间4-14.
你这个问题就等于:
x = a[i] - a[j] (ij)
求x的最大值。
public class FindMaxDiff {
public int findMaxDiff(int[] p) {
int max = p[0];
int diff = 0;
int n = p.length;
for (int i = 0; i n; i++) {
if (max p[i])
max = p[i];
if (max - p[i] diff)
diff = max - p[i];
}
return diff;
}
public static void main(String[] args) {
int a[] = new int[] { -3, -2, -3, -6, -1, -1, 5, 3, 2, -3, -2, -5, -2,
-3, -11, 1, 3 };
FindMaxDiff f = new FindMaxDiff();
int result = f.findMaxDiff(a);
System.out.println(result);
}
}
java区间算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据区间划分算法、java区间算法的信息别忘了在本站进行查找喔。
发布于:2022-12-09,除非注明,否则均为
原创文章,转载请注明出处。