88. Merge Sorted Array
Leetcode 问题: 88. Merge Sorted Array
Categories:
题目
You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.
Merge nums1 and nums2 into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.
合併 2 个排序过的整数阵列为一个阵列
答案
Golang
func merge(numberList1 []int, list1ElementCount int, numberList2 []int, list2ElementCount int) []int {
// 总数字个数
totalElementCount := list1ElementCount + list2ElementCount
for list1ElementCount > 0 && list2ElementCount > 0 {
// 当其中一清单还有资料
// 将较大的数字设定在「清单1」最后方
if numberList1[list1ElementCount-1] <= numberList2[list2ElementCount-1] {
// 「清单1」数字小于或等于「清单2」
// 「清单1」最后面设定为「清单 2」数字
numberList1[totalElementCount-1] = numberList2[list2ElementCount-1]
list2ElementCount--
} else {
// 「清单1」数字大于「清单2」
// 「清单1」最后面设定为「清单 1」数字
numberList1[totalElementCount-1] = numberList1[list1ElementCount-1]
list1ElementCount--
}
// 继续处理下一个数字
totalElementCount--
}
// 避免「清单2」资料没有处理完,而「清单1」的数字已经更新到阵列中,所以剩下的「清单2」数字皆为较小的数字,所以直接复盖数字即可
for ; list2ElementCount > 0; list2ElementCount-- {
numberList1[list2ElementCount-1] = numberList2[list2ElementCount-1]
}
return numberList1
}
完整程式码
package main
import (
"fmt"
)
type Question struct {
// 参数
Parameter
// 答案
Answer
}
// 参数
type Parameter struct {
numberList1 []int
list1ElementCount int
numberList2 []int
list2ElementCount int
}
// 答案
type Answer struct {
result []int
}
func main() {
QuestionList := []Question{
{
Parameter{[]int{1, 2, 3, 0, 0, 0}, 3, []int{2, 5, 6}, 3},
Answer{[]int{1, 2, 2, 3, 5, 6}},
},
{
Parameter{[]int{0}, 0, []int{1}, 1},
Answer{[]int{1}},
},
}
fmt.Printf("------------------------Leetcode Problem 88------------------------\n")
for _, question := range QuestionList {
param := question.Parameter
expectAnswer := question.Answer
exactAnswer := merge(param.numberList1, param.list1ElementCount, param.numberList2, param.list2ElementCount)
fmt.Printf("【input】:%v 【output】:%v 【expect】:%v\n", param, exactAnswer, expectAnswer.result)
}
}
func merge(numberList1 []int, list1ElementCount int, numberList2 []int, list2ElementCount int) []int {
// 总数字个数
totalElementCount := list1ElementCount + list2ElementCount
for list1ElementCount > 0 && list2ElementCount > 0 {
// 当其中一清单还有资料
// 将较大的数字设定在「清单1」最后方
if numberList1[list1ElementCount-1] <= numberList2[list2ElementCount-1] {
// 「清单1」数字小于或等于「清单2」
// 「清单1」最后面设定为「清单 2」数字
numberList1[totalElementCount-1] = numberList2[list2ElementCount-1]
list2ElementCount--
} else {
// 「清单1」数字大于「清单2」
// 「清单1」最后面设定为「清单 1」数字
numberList1[totalElementCount-1] = numberList1[list1ElementCount-1]
list1ElementCount--
}
// 继续处理下一个数字
totalElementCount--
}
// 避免「清单2」资料没有处理完,而「清单1」的数字已经更新到阵列中,所以剩下的「清单2」数字皆为较小的数字,所以直接复盖数字即可
for ; list2ElementCount > 0; list2ElementCount-- {
numberList1[list2ElementCount-1] = numberList2[list2ElementCount-1]
}
return numberList1
}