📌  相关文章
📜  生成数组,以便用它们的差异替换任何两个元素给出相同或更大的总和

📅  最后修改于: 2022-05-13 01:56:09.161000             🧑  作者: Mango

生成数组,以便用它们的差异替换任何两个元素给出相同或更大的总和

给定一个非负整数N ,任务是生成一个数组,如果该数组的任何两个元素被它们的绝对差值替换,则当前数组的总和大于或大于生成的数组。

注意:如果有多个可能的数组,则返回其中任何一个

例子:

方法:这个问题可以根据以下数学观察来解决:

基于上述观察可以看出,如果对于生成的数组(比如arr[] ),任何第 i 个元素的值至少为3*arr[i-1] ,那么该数组将满足给定条件。

按照下面提到的步骤来实现上述观察:

  • 生成一个大小为 N 的数组arr[]并初始化arr[0] = 1
  • 在数组中从i = 1 迭代到 N-1
    • arr[i]设置为3*arr[i-1]
  • 返回生成的数组。

下面是上述方法的实现。

C++
// C++ program for the above approach
 
#include 
using namespace std;
#define ll long long int
 
// Function to generate the array
vector createArray(int N)
{
    vector res;
 
    // Initializing the arr[0] with 1
    long long int ans = 1;
    while (N--) {
        res.push_back(ans);
 
        // For every number we are multiplying
        // the previous number with 3
        ans *= 3;
    }
    return res;
}
 
// Driver code
int main()
{
    int N = 3;
 
    // Function call
    vector ans = createArray(N);
    for (int x : ans)
        cout << x << " ";
    return 0;
}


Java
// Java program for the above approach
 
import java.util.*;
 
class GFG {
 
  // Function to generate the array
  static Vector createArray(int N)
  {
    Vector res = new Vector();
 
    // Initializing the arr[0] with 1
    int  ans = 1;
    while (N != 0) {
      res.add(ans);
 
      // For every number we are multiplying
      // the previous number with 3
      ans *= 3;
      N -= 1;
    }
    return res;
  }
 
  // Driver code
  public static void main (String[] args) {   
    int N = 3;
 
    // Function call
    Vector ans = createArray(N);
    ans.forEach((n) -> System.out.print(n));
  }
}
 
// This code is contributed by hrithikgarg03188


输出
1 3 9 

时间复杂度: O(N)
辅助空间: O(N)