使用另一个数组最大化元素的 JavaScript 程序

在本文中,我们将使用另一个数组实现一个 JavaScript 程序来最大化元素。我们有两个数组,必须从第二个数组中选取一些元素并替换第一个数组的元素。我们将看到实现将要讨论的概念的完整代码。

问题简介

在这个问题中,我们有两个数组,我们必须使第一个数组的所有元素尽可能最大,或者简单地我们必须使第一个数组的所有元素之和最大。我们可以从第二个数组中选取元素,但要点是我们必须从第二个数组中只选取一个元素一次,之后我们只能选取另一个元素。例如 –

我们有两个数组 –

Array1: 1 2 3 4 5 
Array2: 5 6 2 1 9

我们可以看到第二个数组中的许多元素比第一个数组中存在的元素更大。

我们可以选择 9 代替 3,选择 6 代替 2,选择 5 代替 1。这使得最终的数组看起来像这样 –

5 6 9 4 5 

我们将看到两种方法,它们都通过对数组和两个指针进行排序来实现,但唯一的区别是我们将在哪里选择指针。

方法

我们已经看到了上面的示例,从中我们可以看到,我们可以将第一个数组中的小元素与第二个数组中的最大元素进行交换。

  • 第 1 步 – 首先,我们将按升序对两个数组进行排序,然后反转第二个数组以使其按降序排序。

  • 第 2 步 – 我们将维护两个指向两个数组的第一个索引的指针。

  • 第 3 步 – 由于第一个元素指针将指向最小的数字,我们可以将该数字与第二个数组的最大数字进行交易。

  • 第 4 步 – 在每次迭代中,我们将交换两个数组指针并增加指针。

  • 第 5 步 – 如果第一个数组的当前索引的元素与第二个数组的元素相比变得更大,那么我们可以停止进一步的步骤。

  • 第 6 步 – 最后,我们将打印数组的元素。

示例

// function to find the maximum array
function maximumArray(array1, array2){
   var len1 = array1.length
   var len2 = array2.length
   
   // sorting the elements of both arrays
   array1.sort()
   array2.sort()
   
   // reversing the arrays
   array1.reverse()
   array2.reverse()
   
   // traversing over the arrays
   var ptr1 = 0
   var ptr2 = 0
   var ptr3 = 0
   
   // creating new array to store the answer
   var ans = new Array(len1);
   while(ptr3 < len1){
      if(ptr2 == len2){
         while(ptr3 != len1){
            ans[ptr3] = array1[ptr1];
            ptr3++;
            ptr1++;
         }
      }
      else if(array1[ptr1] > array2[ptr2]){
         ans[ptr3] = array1[ptr1];
         ptr1++;
      } else {
         ans[ptr3] = array2[ptr2];
         ptr2++;
      }
      ptr3++;
   }
   console.log("The final array is: ")
   console.log(ans)
}
// declaring arrays
array1 = [1, 2, 4, 5, 3]
array2 = [5, 6, 2, 1, 9]

// calling the function
maximumArray(array1,array2)

时间和空间复杂度

上述代码的时间复杂度为 O(N*log(N)),其中 N 是给定数组的大小,这里的对数因子是由于我们用于对数组进行排序的排序函数而产生的。< /p>

我们使用一个额外的数组来存储元素,这使得空间复杂度为 O(N),但是需要该数组来存储它的答案,可能会也可能不会被视为额外的空间。

直接排序方法

在之前的方法中,我们对数组的元素进行排序,然后使用两个指针方法,但是有一个直接的方法,借助它我们可以简单地做到这一点 –

  • 通过使用 new 关键字和 Array 关键字,我们将创建一个新数组,其大小为两个给定数组的总和或长度。

  • 我们将两个给定数组的所有元素一一填充到新数组中。

  • 我们将对新创建的数组进行排序,以按升序排列元素。

  • 所有最伟大的元素都出现在最后,我们可以轻松获得它们。

示例

// function to find the maximum array
function maximumArray(array1, array2){
   var len1 = array1.length
   var len2 = array2.length
   var ans = new Array(len1+len2);
   for(var i = 0; i<len1; i++){
      ans[i] = array1[i];
   }
   for(var i = 0; i< len2; i++){
      ans[i+len1] = array2[i];
   }
   ans.sort();
   for(var i = 0;i<len1;i++){
      array1[i] = ans[len2+len1-i-1];
   }
   console.log("The final array is: ")
   console.log(array1)
}

// declaring arrays
array1 = [1, 2, 4, 5, 3]
array2 = [5, 6, 2, 1, 9]
// calling the function
maximumArray(array1,array2)

时间和空间复杂度

上述代码的时间复杂度为 O(N*log(N)),其中 N 是给定数组的大小,这里的对数因子是由于我们用于对数组进行排序的排序函数而产生的。

我们使用一个额外的数组来存储元素,这使得空间复杂度为 O(N)。

结论

在上面的教程中,我们已经实现了一个使用另一个数组最大化元素的 JavaScript 程序。我们有两个数组,必须从第二个数组中选取一些元素并替换第一个数组的元素。我们已经看到两种方法都使用排序的概念。一种具有两个指针的方法需要 O(N*log(N)) 的时间和 O(1) 的空间,而另一种方法需要相同的时间但 O(N) 的空间。

以上就是使用另一个数组最大化元素的 JavaScript 程序的详细内容,更多请关注双恒网络其它相关文章!

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

云资源网 » 使用另一个数组最大化元素的 JavaScript 程序

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
你们有qq群吗怎么加入?
当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群https://www.sudo1.com/page-qun.html。
  • 会员数(个)
  • 12334资源数(个)
  •        
  • 资源(G)
  •        
  • 今日下载
  • 1406稳定运行(天)

提供最优质的资源集合

立即查看 了解详情