一个数组中如何找到
>=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.   

    import java.util.ArrayList;public class Test
    {
    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()));
    }
    }
      

  2.   

    import java.util.ArrayList;
    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());
    }
    }
      

  3.   

    这是啥需求啊?做什么用的?
    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中运行过,如果有关键词拼写错误请自行修正
      

  4.   

    我想的是先把数组排序....
    Arrays.sort(数组)
    然后从这个顺序中找一个数据先对比
    例如排序前是1,999,2,9991,3,11,
    排序后就成了1,2,3,11,999,9991我通过判断第x的数据的大小,确定第x个数据前的数据都会满足条件type1
    因为数据量很大大概100多w条所以希望找到一个比较好的算法啊
      

  5.   

    package test.another;import java.util.Arrays;public class Test { /**
     * @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;
    }

    }}