【问题标题】:Pairs which are Divisible by 4 [closed]可被 4 整除的对[关闭]
【发布时间】: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,并真正研究它们各自的含义。这是一道数学题,因此您可以更好地理解此处使用的数学术语和概念。含义:基本上这段代码使用聪明的数学技巧来达到预期的结果。所需的代码没有太多解释。但对数学的理解。

标签: java arrays algorithm


【解决方案1】:

假设您有以下数字 -

4, 5, 6, 7, 8, 9, 10, 12

现在什么时候可以被 4 整除?当然,当MOD0 时。所以如果你有两个号码给你MOD0,你可以把它们配对。

在上面的数组中,你有4, 8, 12,它会给你MOD 0。你可以从这 3 个中得到多少对?

3C2 -&gt; (3 * (3-1)) / 2

同样,您可以配对6, 10,因为6 将给您MOD 210 也会给您MOD 2。结合这些,你会得到一个能被4整除的数字

最后,您可以将MOD 1MOD 3 的数字配对。因为这些对的总和可以被4 整除。如果你有 X many MOD 1 和 Y many MOD 3,你可以让 X * Y 对数。

【讨论】:

  • 我在这里理解这些东西,函数返回的是从频率数组中计算出来的 ans 变量,这是我无法理解的东西。
  • 它正在计算 MOD 值的频率。如果您的频率为 0 是 5。这意味着您有 5 个可以被 5 整除的数字。如果您的频率为 1 是 3,则意味着您有 3 个 MOD 值为 1 的数字(例如 5、9、13 )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2014-09-26
  • 2014-06-02
相关资源
最近更新 更多