简体   繁体   中英

output only if a number is repeating consecutively 3 times in java

Consider an array as shown

int[] nums = {1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 1, 1, 2, 2, 2} 

Output the number that's repeating consecutively n times. For example if we need to output a number that repeats consecutively 3 times then the output must be 1 , 3 , 5 and 2 . 4 should not be considered as it's repeating consecutively four times.

Please let me know how this can be achieved in Java with both traditional and Java 8 streams way.

I tried something like below, but it ignores the last three elements. If I doesn't give it will reach out of bound.

for(int i = 0; i < nums.length - 3; i++) {
    if(nums[i] == nums[i + 1] && nums[i + 1] == nums[i + 2] && nums[i + 2] != nums[i + 3]) {
        System.out.println(nums[i]);
        continue;
    }
}

You need to check if there are numbers that are the same before the group i , i+1 , and i+2 as well:

for(int i = 0; i <= nums.length - 3; i++){
    if((i == 0 || nums[i] != nums[i - 1]) && nums[i] == nums[i+1] && nums[i+1] == nums[i+2] && (i + 2 == nums.length - 1 || nums[i+2] != nums[i+3])){
        System.out.println(nums[i]);
    }
}

This algorithm would not require to store too many numbers:

  • loop over the array
  • check if your variable contains the same as the current element
  • if yes, increase a counter
  • if no:
    • check if counter is three
      • if yes, output the element you counted (not the current one)
    • reset counter to zero
  • save the element you are looking at in the variable
  • after the loop, check if the last element was counted three times (and not yet printed). If yes, print it.

Ok, I implemented the above algorithm and came up with this:

public class Test {
    static int[] nums = {1,1,1,2,2,3,3,3,4,4,4,4,5,5,5,1,1,2,2,2};

    public static void main(String[] args) {
        int countingNumber = 0;
        int count = 0;
        
        for (int num: nums) {
            if (countingNumber == num) {
                count++;
            } else {
                if (count == 3) {
                    System.out.print(String.format(" %d", countingNumber));
                }
                count = 1;
                countingNumber = num;
            }
        }

        if (count == 3) {
            System.out.print(String.format(" %d", countingNumber));
        }
    }
}

When run, it prints

 1 3 5 2

as was requested.

public class Xyz {
public static void main(String[] args) {
//Try This just change the value of n.
    String s = "";
    int[] nums = {1,1,1,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,1,1,2,2,2};
    int n =3;
    for(int i=0; i<nums.length-2;i++) {
        int c = 0;
        for (int j = i+1; j < nums.length; j++){
            if (nums[i] == nums[j]) {
                c++;
                if (c>=n) {
                    i=i+n;
                    break;
                }
            }
            else{
                break;
            }
    }
        if(c == n-1) {
            s = s + nums[i] + ' ';
            i = i + n-1 ;
        }
    }
    System.out.println(s);
}

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM