【发布时间】:2021-02-08 05:29:15
【问题描述】:
我正在 GeeksforGeeks 上练习编码问题,我遇到了这个问题,我试图解决这个问题,但我没有这样做。所以我看到了代码,但我无法理解它背后的逻辑。解决代码我也放上去,有懂的请给我解释一下。
给定一个数组,如果有‘n’个正整数,计算它的对数 数组中总和可被 4 整除的整数。
示例 1:
输入:Arr[] = {2, 2, 1, 7, 5}
输出:3
说明:
(2,2), (1,7) 和 (7,5) 是 3 对。示例 2:
输入:Arr[] = {2, 2, 3, 5, 6}
输出:4你的任务:
这是一个功能问题。输入已经由 驱动程序代码。您只需要完成功能 count4Divisibiles() 接受一个数组 (arr)、sizeOfArray (n) 和 返回对数。驱动程序代码负责 打印。预期时间复杂度:O(N)。
预期辅助空间:O(1)。约束:
1≤N≤105
1 ≤ arr[] ≤ 105
问题的解决方案
// Java program to count pairs // whose sum divisible by '4' import java.util.*; class Count{ public static int count4Divisibiles(int arr[] , int n ) { // Create a frequency array to count // occurrences of all remainders when // divided by 4 int freq[] = {0, 0, 0, 0}; int i = 0; int ans; // Count occurrences of all remainders for (i = 0; i < n; i++) ++freq[arr[i] % 4]; //If both pairs are divisible by '4' ans = freq[0] * (freq[0] - 1) / 2; // If both pairs are 2 modulo 4 ans += freq[2] * (freq[2] - 1) / 2; // If one of them is equal // to 1 modulo 4 and the // other is equal to 3 // modulo 4 ans += freq[1] * freq[3]; return (ans); } public static void main(String[] args) { int arr[] = {2, 2, 1, 7, 5}; int n = 5; System.out.print(count4Divisibiles(arr, n)); } }
【问题讨论】:
-
尝试使用调试器,或尝试添加打印语句。你通过编程学习编程。在这种情况下:通过运行代码,并尝试深入了解它是如何工作的。所以请不要指望我们会为您做到这一点。除此之外,退后一步:查看 cmets,并真正研究它们各自的含义。这是一道数学题,因此您可以更好地理解此处使用的数学术语和概念。含义:基本上这段代码使用聪明的数学技巧来达到预期的结果。所需的代码没有太多解释。但对数学的理解。