updated readme
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
// Author: Rodney Shaghoulian
|
||||
// Github: github.com/rshaghoulian
|
||||
// HackerRank: hackerrank.com/rshaghoulian
|
||||
|
||||
/*
|
||||
|
||||
Time Complexity: O(n + k)
|
||||
Space Complexity: O(k)
|
||||
|
||||
We keep track of the mod values in buckets for each number we read. We can do this
|
||||
by creating k buckets where bucket "i" counts each number "n" where n % k = i.
|
||||
|
||||
Notice that each bucket has a corresponding "complement" bucket. That is, if we take
|
||||
the mod value of one bucket and add it to the mod value of another bucket, we get "k".
|
||||
|
||||
Bucket Complement Bucket
|
||||
------ -----------------
|
||||
0 0
|
||||
1 k-1
|
||||
2 k-2
|
||||
3 k-3
|
||||
...
|
||||
k-3 3
|
||||
k-2 2
|
||||
k-1 1
|
||||
|
||||
As we come across each number, we find its corresponding complement bucket. Each number in
|
||||
this complement bucket can be paired with our original number to create a sum divisible by *k*
|
||||
|
||||
*/
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Solution {
|
||||
public static void main(String [] args) {
|
||||
Scanner scan = new Scanner(System.in);
|
||||
int n = scan.nextInt();
|
||||
int k = scan.nextInt();
|
||||
|
||||
int [] bucket = new int[k];
|
||||
int count = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int modValue = scan.nextInt() % k;
|
||||
count += bucket[(k - modValue) % k]; // adds # of elements in complement bucket
|
||||
bucket[modValue]++; // saves in bucket
|
||||
}
|
||||
|
||||
scan.close();
|
||||
System.out.println(count);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user