本文介绍: 可以称之为”三指针” 方法,因为我们同时使用了三个指针(p1、p2 和 p)来操作和遍历两个数组。p1 指向 nums1 中的元素p2 指向 nums2 中的元素p 指向 nums1 中应该放置下一个元素的位置然而,你也可以将其视为 “双指针” 方法,如果你将 p 视为一个辅助变量,而不是一个 “指针”。在这种情况下,”双指针” 是指 p1 和 p2,它们分别遍历 nums1 和 nums2。这种分类主要取决于你如何定义 “指针”。
我的第一想法确实是:先合并数组,再排序,搞完。
哈哈哈,想那么多干嘛,目的达成了就好了。
力扣官方题解是双指针:
还有糕手:
Python:
def merge(nums1, m, nums2, n):
# 两个指针分别指向 nums1 和 nums2 的最后一个元素
p1 = m - 1
p2 = n - 1
# 指向 nums1 的最后一个位置
p = m + n - 1
# 当 nums1 和 nums2 都还有元素时,比较它们的最后一个元素并将较大的元素放在 nums1 的正确位置上
while p1 >= 0 and p2 >= 0:
if nums1[p1] < nums2[p2]:
nums1[p] = nums2[p2]
p2 -= 1
else:
nums1[p] = nums1[p1]
p1 -= 1
p -= 1
# 如果 nums2 还有剩余元素,将它们复制到 nums1 的剩余位置上
nums1[:p2 + 1] = nums2[:p2 + 1]
C#:
public void Merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1;
int p2 = n - 1;
int p = m + n - 1;
while (p1 >= 0 && p2 >= 0) {
if (nums1[p1] < nums2[p2]) {
nums1[p] = nums2[p2];
p2--;
} else {
nums1[p] = nums1[p1];
p1--;
}
p--;
}
while (p2 >= 0) {
nums1[p] = nums2[p2];
p--;
p2--;
}
}
总结
可以称之为”三指针” 方法,因为我们同时使用了三个指针(p1、p2 和 p)来操作和遍历两个数组。每个指针都有其特定的用途:
- p1 指向 nums1 中的元素
- p2 指向 nums2 中的元素
- p 指向 nums1 中应该放置下一个元素的位置
然而,你也可以将其视为 “双指针” 方法,如果你将 p 视为一个辅助变量,而不是一个 “指针”。在这种情况下,”双指针” 是指 p1 和 p2,它们分别遍历 nums1 和 nums2。这种分类主要取决于你如何定义 “指针”。
原文地址:https://blog.csdn.net/weixin_47420447/article/details/135541378
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_55212.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。