一个数组中如何找到
>=1 and < 10 [类型1]
>=10 and < 73 [类型2]
>=73 and < 123 [类型3]
分别在这个数组里面占多少个元素的算法
例如
1,2,3,100,102,2000,
类型1--- 3个元素[1,2,3]
类型2--- 0个元素
类型3--- 2个元素[100,102]
其他类型---1个元素[2000]
>=1 and < 10 [类型1]
>=10 and < 73 [类型2]
>=73 and < 123 [类型3]
分别在这个数组里面占多少个元素的算法
例如
1,2,3,100,102,2000,
类型1--- 3个元素[1,2,3]
类型2--- 0个元素
类型3--- 2个元素[100,102]
其他类型---1个元素[2000]
{
public static void main(String args[])
{
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
ArrayList list3 = new ArrayList();
ArrayList listElse = new ArrayList();
int a[] = {1, 2, 3, 100, 102, 2000};
for (int i = 0; i < a.length; i++) {
if (a[i] >= 1 && a[i] < 10) {
list1.add(a[i]+"");
}
else if (a[i] >=10 && a[i] < 73) {
list2.add(a[i]+"");
}
else if(a[i] >=73 && a[i] < 123) {
list3.add(a[i]+"");
}
else {
listElse.add(a[i]+"");
}
}
System.out.println("类型1-- "+list1.size()+"个元素"+(list1.size()==0?"":list1.toString()));
System.out.println("类型2-- "+list2.size()+"个元素"+(list2.size()==0?"":list2.toString()));
System.out.println("类型3-- "+list3.size()+"个元素"+(list3.size()==0?"":list3.toString()));
System.out.println("其他类型-- "+listElse.size()+"个元素"+(listElse.size()==0?"":listElse.toString()));
}
}
import java.util.Arrays;
import java.util.Date;public class test {
/**
* @param args
*/
public static void main(String[] args) {
//int[] array = {1,2,3,100,102,2000};
int[] array = new int[10000];
for (int i = 0;i < array.length;i ++) {
array[i] = i + 1;
}
ArrayList type1 = new ArrayList();
ArrayList type2 = new ArrayList();
ArrayList type3 = new ArrayList();
ArrayList type4 = new ArrayList();
System.out.println("start at :" + new Date());
for (int i = 0;i < array.length;i ++) {
if (array[i] >= 1 && array[i] < 10) {
type1.add(array[i] + "");
}
else if (array[i] >= 10 && array[i] < 73) {
type2.add(array[i] + "");
}
else if (array[i] >= 73 && array[i] < 123) {
type3.add(array[i] + "");
}
else {
type4.add(array[i] + "");
}
}
System.out.println("type 1: " + type1.size() + " items" + Arrays.toString(type1.toArray()));
System.out.println("type 2: " + type2.size() + " items" + Arrays.toString(type2.toArray()));
System.out.println("type 3: " + type3.size() + " items" + Arrays.toString(type3.toArray()));
System.out.println("others: " + type4.size() + " items" + Arrays.toString(type4.toArray()));
System.out.println("end at :" + new Date());
}
}
1。定义变量(代表不同类型的个数)
int type1Count = 0;int type2Count = 0; ...
2。遍历数组并以范围做判断,同时统计个数(假设你的数组是int[] list;)
Iterator it = list.iterator();
while(it.hasNext()){
int num = it.next();
if(num>=1 && num<10){
type1Count++;
}else if(num>=10 && num<73){
type2Count++;
}else if(num>=73 && num<123){
type3Count++;
}else{
type4Count++;
}
}
3。提示:没有在IDE中运行过,如果有关键词拼写错误请自行修正
Arrays.sort(数组)
然后从这个顺序中找一个数据先对比
例如排序前是1,999,2,9991,3,11,
排序后就成了1,2,3,11,999,9991我通过判断第x的数据的大小,确定第x个数据前的数据都会满足条件type1
因为数据量很大大概100多w条所以希望找到一个比较好的算法啊
* @param args
*/
public static void main(String[] args) {
int[] divide = {1,10,73,123,1000,10000};
int[] result = new int[divide.length];
int[] array = new int[1000000];
for (int i = 1;i <= 1000000;i ++) {
array[i - 1] = i ;
}
Arrays.sort(array);
for (int i = 0;i < divide.length;i ++) {
result[i] = select(array,0,array.length,divide[i]);
}
for (int i = 0;i < result.length - 1;i ++) {
System.out.println("The Items >= " + divide[i] + " and < " + divide[i + 1] + " have " + (result[i + 1] - result[i]));
for (int j = result[i];j < result[i + 1];j ++) {
System.out.print(array[j] + " ");
}
System.out.println();
}
}
private static int select(int[] array,int start,int end,int item) {
if (start == end && end == 0) {
return 0;
}
int length = 0;
if ((start + end) % 2 == 1) {
length = (start + end + 1) / 2;
}
else {
length = (start + end) / 2;
}
if (array[length] > item) {
return select(array,start,(start + end) / 2,item);
}
else if (array[length] < item) {
return select(array,(start + end) / 2,end ,item);
}
else{
while (array[length - 1] == item) {
length --;
}
return length;
}
}}