diff --git a/app/src/main/java/control/Double.java b/app/src/main/java/control/Double.java index cc5cf15..ddf4908 100644 --- a/app/src/main/java/control/Double.java +++ b/app/src/main/java/control/Double.java @@ -1,5 +1,9 @@ package control; +import java.util.HashMap; +import java.util.Map; +import java.util.Arrays; + public class Double { /** * Sums all values squared from 0 to n @@ -8,15 +12,8 @@ public class Double { * @return The sum of the first n natural numbers squared. */ public static int sumSquare(int n) { - int sum = 0; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - if (i == j) { - sum = sum + i * j; - } - } - } - return sum; + // Using the mathematical formula n(n+1)(2n+1)/6 for sum of squares + return n * (n + 1) * (2 * n + 1) / 6; } /** @@ -26,13 +23,8 @@ public static int sumSquare(int n) { * @return The sum of the first n triangular numbers. */ public static int sumTriangle(int n) { - int sum = 0; - for (int i = 0; i < n + 1; i++) { - for (int j = 0; j < i; j++) { - sum = sum + j; - } - } - return sum; + // Using the mathematical formula n(n+1)(n+2)/6 for sum of triangular numbers + return n * (n + 1) * (n + 2) / 6; } /** @@ -44,19 +36,17 @@ public static int sumTriangle(int n) { * @return The number of pairs in the array. */ public static int countPairs(int[] arr) { - int count = 0; - for (int i = 0; i < arr.length; i++) { - int nDuplicates = 0; - for (int j = 0; j < arr.length; j++) { - if (arr[i] == arr[j]) { - nDuplicates++; - } - } - if (nDuplicates == 2) { - count++; + Map counts = new HashMap<>(); + for (int value : arr) { + counts.put(value, counts.getOrDefault(value, 0) + 1); + } + int pairs = 0; + for (int count : counts.values()) { + if (count == 2) { + pairs++; } } - return count / 2; + return pairs; } /** @@ -68,12 +58,14 @@ public static int countPairs(int[] arr) { * equal. */ public static int countDuplicates(int[] arr0, int[] arr1) { + if (arr0 == null || arr1 == null) { + return 0; + } int count = 0; - for (int i = 0; i < arr0.length; i++) { - for (int j = 0; j < arr1.length; j++) { - if (i == j && arr0[i] == arr1[j]) { - count++; - } + int minLength = Math.min(arr0.length, arr1.length); + for (int i = 0; i < minLength; i++) { + if (arr0[i] == arr1[i]) { + count++; } } return count; @@ -88,13 +80,11 @@ public static int countDuplicates(int[] arr0, int[] arr1) { * @return The sum of all values in the 2D array. */ public static int sumMatrix(int[][] arr) { - int sum = 0; - int n = arr.length; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - sum += arr[i][j]; - } + if (arr == null || arr.length == 0) { + return 0; } - return sum; + return Arrays.stream(arr) + .flatMapToInt(Arrays::stream) + .sum(); } -} +} \ No newline at end of file