返回
两个指针合并有序数组的技巧
前端
2024-01-02 20:27:43
在编程中,我们经常需要处理有序数组。LeetCode 上有一个经典题目:“合并两个有序数组”,要求我们将两个有序数组合并成一个有序数组。本篇博文将介绍一种使用双指针合并两个有序数组的技巧。
双指针算法
双指针算法是一种遍历数组的技巧,它使用两个指针同时遍历数组。一个指针从数组的开头开始,另一个指针从数组的结尾开始。这样,我们可以同时比较两个元素,并将较小的元素放入结果数组中。
具体步骤
- 使用 splice 方法,将 nums1 和 nums2 指定位置之后的无关元素去除。
- 如果二者其中有一个是空数组,则直接 push 到 nums1 中。
- 定义双指针,进行依次比较,小的放到 nums1 中。
- 比较完毕后,如果还剩余元素,则直接 push 到 nums1 中。
代码示例
function mergeTwoSortedArrays(nums1, nums2) {
// 去除无关元素
nums1.splice(nums1.length, nums2.length);
nums2.splice(0, nums1.length);
// 检查是否有空数组
if (nums1.length === 0) {
nums1.push(...nums2);
return nums1;
}
if (nums2.length === 0) {
return nums1;
}
// 定义双指针
let i = 0;
let j = 0;
// 比较元素并合并
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
nums1.splice(i, 0, nums2[j]);
i++;
j++;
} else {
i++;
}
}
// 将剩余元素合并
if (j < nums2.length) {
nums1.push(...nums2.slice(j));
}
return nums1;
}
相关工具
总结
双指针算法是一种简单高效的合并两个有序数组的方法。它只需要遍历数组一次,就能将两个有序数组合并成一个有序数组。这种算法在实际编程中非常有用,例如在排序、搜索、去重等操作中。