在本文中,我们将使用另一个数组实现一个 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 程序的详细内容。更多信息请关注PHP中文网其他相关文章!