zoukankan      html  css  js  c++  java
  • 合并两个有序数组-双指针-基于Go

    两个有序数组nums1和nums2,将nums2合并到nums1中,使nums1成为一个有序数组。

    初始化nums1和nums2的元素数量分别为m和n。
    假设nums1的空间大小等于m+n(足够)。

    • 一般解法,先拷贝,再排序
    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func merge(nums1 []int, m int, nums2 []int, n int)[]int{
    	copy(nums1[m:], nums2)
    	sort.Ints(nums1)
    
    	return nums1
    }
    
    
    func main(){
    	var nums1 = [9]int{1,3,5,7,9}
    	var nums2 = [...]int{2,4,6,8}
    	fmt.Println(merge(nums1[:], 5, nums2[:],4))
    }
    
    • 使用双指针
    func merge2(nums1 []int, m int, nums2 []int, n int)[]int{
    	var nums1Copy = make([]int, m+n)
    	copy(nums1Copy, nums1)
    	var p1 = 0//指向nums1Copy
    	var p2 = 0//指向nums2
    	var p = 0//指向nums1
    	for p1<m && p2<n{
    		switch  {
    		case nums1Copy[p1]<=nums2[p2]:
    			nums1[p] = nums1Copy[p1]
    			p++
    			p1++
    		default:
    			nums1[p] = nums2[p2]
    			p++
    			p2++
    		}
    	}
    	if p1<m{//nums1Copy中的元素还未取完,已经取了p1个
    		copy(nums1[p:], nums1Copy[p1:])
    	}
    	if p2<n{//num2中的元素还为取完,已经取了p2个
    		copy(nums1[p:], nums2[p2:])
    	}
    
    	return nums1
    }
    
    • 双指针改进版(空间复杂度降低,不使用额外空间)
    func merge3(nums1 []int, m int, nums2 []int, n int)[]int{
    	// 从后往前遍历
    	// nums1[m-1] ... nums1[0]
    	// nums2[n-1] ... nums2[0]
    	var p1 = m-1
    	var p2 = n-1
    	var p = m+n-1
    	for p1>=0 && p2>=0{
    		switch {
    		case nums1[p1]>=nums2[p2]:
    			nums1[p] = nums1[p1]
    			p--
    			p1--
    		default:
    			nums1[p] = nums2[p2]
    			p--
    			p2--
    		}
    	}
    	if p1>0{//nums1中的元素还未取完
    		copy(nums1[:p], nums1[:p1])
    	}
    	if p2>0{//nums2中的元素还未取完
    		copy(nums1[:p], nums2[:p2])
    	}
    
    	return nums1
    }
    
  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14630843.html
Copyright © 2011-2022 走看看