【问题标题】:Arrays Group Counter数组组计数器
【发布时间】:2014-10-03 01:04:16
【问题描述】:

给定一个提供的数组,确定存在多少个指定大小的组。

对于数组

[1,1,1,2,2,2,3,3,3,4,5,6,7] 

有 7 个组至少有 1 个,3 个组至少有 2 个,3 个组至少有 3 个。一个组是一系列相同的值。 1 1 1 是一组 3,但它也是一组 1 和 2。要算作一组,所有值必须相同。 1 1 1 是一组 3,因为连续有 3 个 1。

我只是好奇,这是怎么做到的?

【问题讨论】:

  • 我认为第一步是更好地掩饰你的作业。
  • 遍历数组,记住之前的值,以这种方式检测变化,计算当前“运行”的长度,累积到以运行长度为索引的数组中。

标签: java arrays counter


【解决方案1】:

使用 java 8

long result = Stream.of(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 6, 7)
        .collect(Collectors.groupingBy(i -> i))
        .entrySet().stream()
        .filter(entry -> entry.getValue().size() >= 1) // specify the size
        .count();
System.out.println(result);

【讨论】:

    【解决方案2】:

    我使用了一个集合数组,我在其中查看了所有组并循环查看每个新数字以及它是否与前一个数字相同。我有一个组计数器,它被传递到一个新数组中。然后打印出结果。

    公开课作业{

    public static void main(String[] args) {
    
        int[] array_list = {3, 3, 3, 3, 3, 9, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8};
        int[] found_groups = new int[7];
        int group_size = 1; 
        int num_changed = 0; 
        for (int i = 1; i < array_list.length; i++) {
    
            if (array_list[i] == array_list[i-1]) {
                group_size++;
    
                if (group_size == 5) {
                    found_groups[0] = group_size;
                }
                if (group_size == 3) {
                    found_groups[2] = group_size; 
                    found_groups[5] = group_size; 
                }
                if (group_size == 4) {
                    found_groups[3] = group_size; 
                }
                if (group_size == 2) {
                    found_groups[4] = group_size; 
                }
                if (group_size ==8) {
                    found_groups[6] = group_size; 
                }
            }
    
            else if (array_list[i] != array_list[i-1]) {
                num_changed++;
                group_size = 1;
                if (group_size == 1) {
                    found_groups[1] = group_size;
                }  
            }
    
        }
    
        int group_one = 0; 
        int group_two = 0; 
        int group_three = 0; 
        int group_four = 0; 
        int group_five = 0; 
        int group_six = 0; 
        int group_one_final = 0; 
    
        for (int i = 0; i < found_groups.length; i++) {
            if (found_groups[i] == 5) {
                group_five++; 
                group_two++;
                group_three++;
                group_four++;
    
            }
            if (found_groups[i] == 1) {
                group_one++; 
                group_one_final = group_one + num_changed; 
            }
            if (found_groups[i] == 3) {
                group_three++; 
                group_two++;
            }
            if (found_groups[i] == 4) {
                group_four++;
                group_two++;
                group_three++;
    
            }
            if (found_groups[i] == 8) {
                group_six++; 
                group_two++; 
                group_three++;
                group_four++;
                group_five++;
            }
            if (found_groups[i] == 2) {
                group_two++; 
    
            }
        }
    
        System.out.println("number of ones groups: " + group_one_final);
        System.out.println("number of two groups: " + group_two);
        System.out.println("number of three groups: " + group_three );
        System.out.println("number of fours groups: " + group_four);
        System.out.println("number of fives groups: " + group_five);
        System.out.println("number of sixes groups: " + group_six);
    }   
    

    }

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多