Four Sum - Leet Code Solution
Problem Statement Given an array nums of n integers and an integer target, are…
July 18, 2019
A number consists of digits. Example: 843. Its a 3-digit number. Radix sort, start by sorting numbers first by their most significant digit, then next, and so on.
So, in simpler terms. If there are maximum n numbers, and max d-digits in a number. This algorithm runs on array d times, and sort the numbers according to their current place digit.
To sort the numbers based on a digit, the any sorting technique can be used. But, most importantly the sort must be a stable sort.
If you look at the pseudo code (assuming we have n numbers, and all are d-digits long):
for (int i=0; i<d; i++;) {
//Sort the array on digit place-i
}
See the code here (explanation is below code):
public class RadixSort {
private int[] arr;
public RadixSort(int[] arr) {
this.arr = arr;
}
/**
* Using CountSort as stable sort
*/
private void countSort(int position) {
int[] c = new int[10]; //0 to 9
for (int i=0; i<this.arr.length; i++) {
int digit = this.getDigit(this.arr[i], position);
c[digit] ++;
}
//accumulate
for (int i=1; i<c.length; i++) {
c[i] = c[i] + c[i-1];
}
int[] res = new int[this.arr.length];
for (int i=this.arr.length-1; i>=0; i--) {
int digit = this.getDigit(this.arr[i], position);
res[c[digit]-1] = this.arr[i];
c[digit] --;
}
this.arr = res;
System.out.println(ArrayUtils.toString(arr));
}
private int getDigit(int num, int position) {
return num/position % 10;
}
/**
* Main method for radix sort
*/
public void sort() {
int max = ArrayUtils.getMaxValue(this.arr);
int position = 1;
while (max/position > 0) {
this.countSort(position);
position *= 10;
}
}
}
Example number: 839
Objective: We need 9, then 3, then 8
To get remainder, we need modulus (%) of a number by 10. We will get the last digit. But, how to get the any other digit?
See method: getDigit()
We first need to reduce the number by dividing with position. And, then take modulus with 10.
i.e. num/position % 10;
The algorithm runs on time complexity of O(d(n + k)) ~= O(n) in worst/average case. Note: Count sort took O(n + k) time, this takes d times the count sort time.
Since, the radix algorithm works on digit-by-digit basis. Consider two numbers:
18
14
So, during first round, the order will become:
14
18
In second round, where we will be comparing most significant digit. If our algorithm is not stable, then any unstable algorithm might put the order like:
18
14
Which is wrong, Right!
Problem Statement Given an array nums of n integers and an integer target, are…
Problem Statement Roman numerals are represented by seven different symbols: I…
Big-O notation In simpler terms, its kind of a unit to measure how efficient an…
It is one of a simple algorithm to study for a beginner to understanding sorting…
Problem Statement Given an array, rotate the array to the right by k steps…
A Binary Search tree (BST) is a data structure which has two children nodes…
Introduction In this post we will see following: How to schedule a job on cron…
Introduction There are some cases, where I need another git repository while…
Introduction In this post, we will see how to fetch multiple credentials and…
Introduction I have an automation script, that I want to run on different…
Introduction I had to write a CICD system for one of our project. I had to…
Introduction Java log4j has many ways to initialize and append the desired…