下面是leetcode問題:“問題是當在nums1上使用sort concat任何其他方法時,它是bot修改nums1,除非我清空它并推送新資料。下面的代碼正在作業,但如果我不想創建nums11并執行nums1 上的每個方法。”
輸入: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 給定兩個整數陣列 nums1 和 nums2,按非遞減排序order,以及兩個整數m和n,分別代表nums1和nums2中的元素個數。
將 nums1 和 nums2 合并為一個按非降序排序的陣列。
最終的排序陣列不應由函式回傳,而是存盤在陣列 nums1 中。為了適應這一點,nums1 的長度為 m n,其中前 m 個元素表示應該合并的元素,最后 n 個元素設定為 0 并且應該被忽略。nums2 的長度為 n。
var merge = function(nums1, m, nums2, n) {
let nums11 = [];
for(let i = 0; i<m; i ){
nums11.push(nums1[i])
}
nums1.length = 0;
nums11 = nums11.concat(nums2);
nums11.sort((a,b) => { return a-b});
for(let i = 0; i<nums11.length;i ){
nums1.push(nums11[i])
}
};
uj5u.com熱心網友回復:
你也許可以嘗試這樣的事情。
for(let i = 0; i<n ; i ){
nums1[i m-1] = nums2[i]; // adding nums2 elements to the elements with value 0 in nums1
}
nums1.sort((a,b) => {return a-b});
return nums1;
至于它沒有被修改的原因,可能是因為問題中的限制。它不會讓您向 nums1 添加更多元素,因為它已經是解決方案適應它所需的大小。
uj5u.com熱心網友回復:
如果您仔細檢查 for 回圈,我們會將元素推入 nums1 陣列。洗掉該行nums1.length=0;,而不是將元素推入 nums1。嘗試更改第 i 個索引上的元素。這將解決問題。像這樣
nums1[i]=(nums11[i])
這是完整的代碼。
function merge(nums1, m, nums2) {
let nums11 = [];
for(let i = 0; i<m; i ){
nums11.push(nums1[i])
}
nums11 = nums11.concat(nums2);
nums11.sort((a,b) => { return a-b});
for(let i = 0; i<nums11.length;i ){
nums1[i]=(nums11[i])
}
};
問題中的代碼使 num1 陣列的長度為 12。
我希望它能解決問題。
uj5u.com熱心網友回復:
問題的要求是就地修改陣列,也不使用內置的排序方法。
考慮以下方法:
- 有兩個指標
i,分別指向陣列的j最后一個索引(不包括空格) 。nums1nums2 - 有一個指向
k的最后一個索引的指標nums1,這是我們在迭代期間插入值的地方。 - 迭代直到
nums2陣列的所有元素都用完。 - 將兩個元素中最大的一個放在
k第 th 索引處。
function merge(nums1, m, nums2, n) {
let i = m - 1,
j = n - 1,
k = m n - 1;
while (j >= 0) {
if (nums1[i] >= nums2[j]) {
nums1[k] = nums1[i];
i -= 1;
} else {
nums1[k] = nums2[j];
j -= 1;
}
k -= 1;
}
}
const nums1 = [1, 4, 8, 11, 0, 0, 0, 0, 0, 0];
const nums2 = [2, 3, 4, 7, 8, 10];
merge(nums1, nums1.length - nums2.length, nums2, nums2.length);
console.log(nums1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466355.html
標籤:javascript 数组
上一篇:簡單的Js函式給我未定義的輸出
