Skip to content

Commit a1bb0cf

Browse files
author
Dhananjay Nagargoje
committed
cyclic sort
1 parent b255bb5 commit a1bb0cf

File tree

4 files changed

+140
-7
lines changed

4 files changed

+140
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,39 @@
11
package problems.patterns.cyclicsort;
2+
import java.util.*;
23

3-
public class AllMissingNumbers {
4-
}
4+
class AllMissingNumbers {
5+
6+
public static List<Integer> findNumbers(int[] nums) {
7+
int i = 0;
8+
while (i < nums.length) {
9+
if (nums[i] != nums[nums[i] - 1])
10+
swap(nums, i, nums[i] - 1);
11+
else
12+
i++;
13+
}
14+
15+
List<Integer> missingNumbers = new ArrayList<>();
16+
for (i = 0; i < nums.length; i++)
17+
if (nums[i] != i + 1)
18+
missingNumbers.add(i + 1);
19+
20+
return missingNumbers;
21+
}
22+
23+
private static void swap(int[] arr, int i, int j) {
24+
int temp = arr[i];
25+
arr[i] = arr[j];
26+
arr[j] = temp;
27+
}
28+
29+
public static void main(String[] args) {
30+
List<Integer> missing = AllMissingNumbers.findNumbers(new int[] { 2, 3, 1, 8, 2, 3, 5, 1 });
31+
System.out.println("Missing numbers: " + missing);
32+
33+
missing = AllMissingNumbers.findNumbers(new int[] { 2, 4, 1, 2 });
34+
System.out.println("Missing numbers: " + missing);
35+
36+
missing = AllMissingNumbers.findNumbers(new int[] { 2, 3, 2, 1 });
37+
System.out.println("Missing numbers: " + missing);
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,44 @@
1-
package problems.patterns.slidingwindows.cyclicsort;
1+
package problems.patterns.cyclicsort;
22

33
public class CyclicSortBasic {
4+
5+
6+
public static void sort(int[] nums) {
7+
int i = 0;
8+
while (i < nums.length) {
9+
int j = nums[i] - 1;
10+
if (nums[i] != nums[j]) {
11+
swap(nums, i, j);
12+
} else {
13+
i++;
14+
}
15+
}
16+
}
17+
18+
private static void swap(int[] arr, int i, int j) {
19+
int temp = arr[i];
20+
arr[i] = arr[j];
21+
arr[j] = temp;
22+
}
23+
24+
public static void main(String[] args) {
25+
int[] arr = new int[] { 3, 1, 5, 4, 2 };
26+
CyclicSortBasic.sort(arr);
27+
for (int num : arr)
28+
System.out.print(num + " ");
29+
System.out.println();
30+
31+
arr = new int[] { 2, 6, 4, 3, 1, 5 };
32+
CyclicSortBasic.sort(arr);
33+
for (int num : arr)
34+
System.out.print(num + " ");
35+
System.out.println();
36+
37+
arr = new int[] { 1, 5, 6, 4, 3, 2 };
38+
CyclicSortBasic.sort(arr);
39+
for (int num : arr)
40+
System.out.print(num + " ");
41+
System.out.println();
42+
}
443
}
44+
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,31 @@
11
package problems.patterns.cyclicsort;
2+
class FindDuplicate {
23

3-
public class FindDuplicate {
4-
}
4+
public static int findNumber(int[] nums) {
5+
int i = 0;
6+
while (i < nums.length) {
7+
if (nums[i] != i + 1) {
8+
if (nums[i] != nums[nums[i] - 1])
9+
swap(nums, i, nums[i] - 1);
10+
else // we have found the duplicate
11+
return nums[i];
12+
} else {
13+
i++;
14+
}
15+
}
16+
17+
return -1;
18+
}
19+
20+
private static void swap(int[] arr, int i, int j) {
21+
int temp = arr[i];
22+
arr[i] = arr[j];
23+
arr[j] = temp;
24+
}
25+
26+
public static void main(String[] args) {
27+
System.out.println(FindDuplicate.findNumber(new int[] { 1, 4, 4, 3, 2 }));
28+
System.out.println(FindDuplicate.findNumber(new int[] { 2, 1, 3, 3, 5, 4 }));
29+
System.out.println(FindDuplicate.findNumber(new int[] { 2, 4, 1, 4, 4 }));
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,35 @@
11
package problems.patterns.cyclicsort;
22

3-
public class MissingNumber {
4-
}
3+
class MissingNumber {
4+
5+
public static int findMissingNumber(int[] nums) {
6+
7+
int i = 0 ;
8+
while (i < nums.length) {
9+
if (nums[i] != nums.length
10+
&& nums[i] != nums[nums[i]]) {
11+
swap(nums, i , nums[i]);
12+
} else {
13+
i++;
14+
}
15+
}
16+
for (int k=0;k < nums.length;k++) {
17+
if (nums[k] != k) {
18+
return k;
19+
}
20+
}
21+
22+
return nums.length;
23+
}
24+
25+
private static void swap(int[] arr, int i, int j) {
26+
int temp = arr[i];
27+
arr[i] = arr[j];
28+
arr[j] = temp;
29+
}
30+
31+
public static void main(String[] args) {
32+
System.out.println(MissingNumber.findMissingNumber(new int[] { 4, 0, 3, 1 }));
33+
System.out.println(MissingNumber.findMissingNumber(new int[] { 8, 3, 5, 2, 4, 6, 0, 1 }));
34+
}
35+
}

0 commit comments

Comments
 (0)