package main
import "fmt"
func main() {
var slice1 = make([]int, 0, 5)
var slice2 = make([]int, 0, 5)
fmt.Println("please input the No.1 array: ")
for i := 1; true; i++ {
var inputNum int
fmt.Printf("No.%d : ", i)
_, err := fmt.Scanf("%d", &inputNum)
if nil == err {
slice1 = append(slice1, inputNum)
} else {
break
}
}
printSlice(slice1)
fmt.Println("please input the No.2 array: ")
for i := 1; true; i++ {
var inputNum int
fmt.Printf("No.%d : ", i)
_, err := fmt.Scanf("%d", &inputNum)
if nil == err {
slice2 = append(slice2, inputNum)
} else {
break
}
}
printSlice(slice2)
fmt.Printf("The mid num is %f \n",findMedianSortedArrays(slice1, slice2))
}
func min(x, y int) int {
if x < y {
return x
}
return y
}
func printSlice(x []int){
fmt.Printf("slice=%v len=%d cap=%d \n",x,len(x),cap(x))
}
//func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
// totalLength := len(nums1) + len(nums2)
// if totalLength%2 == 1 {
// midIndex := totalLength/2
// return float64(getKthElement(nums1, nums2, midIndex + 1))
// } else {
// midIndex1, midIndex2 := totalLength/2 - 1, totalLength/2
// return float64(getKthElement(nums1, nums2, midIndex1 + 1) + getKthElement(nums1, nums2, midIndex2 + 1)) / 2.0
// }
// return 0
//}
//
//func getKthElement(nums1, nums2 []int, k int) int {
// index1, index2 := 0, 0
// for {
// if index1 == len(nums1) {
// return nums2[index2 + k - 1]
// }
// if index2 == len(nums2) {
// return nums1[index1 + k - 1]
// }
// if k == 1 {
// return min(nums1[index1], nums2[index2])
// }
// half := k/2
// newIndex1 := min(index1 + half, len(nums1)) - 1
// newIndex2 := min(index2 + half, len(nums2)) - 1
// pivot1, pivot2 := nums1[newIndex1], nums2[newIndex2]
// if pivot1 <= pivot2 {
// k -= (newIndex1 - index1 + 1)
// index1 = newIndex1 + 1
// } else {
// k -= (newIndex2 - index2 + 1)
// index2 = newIndex2 + 1
// }
// }
// return 0
//}
func getKthElement(nums1, nums2 []int, k int) int {
indexNums1, indexNums2 := 0, 0
for {
if indexNums1 == len(nums1) {
return nums2[indexNums2 + k - 1]
}
if indexNums2 == len(nums2) {
return nums1[indexNums1 + k - 1]
}
if k == 1 {
return min(nums1[indexNums1], nums2[indexNums2])
}
halfNums := k / 2
newIndex1 := min(indexNums1 + halfNums, len(nums1)) - 1
newIndex2 := min(indexNums2 + halfNums, len(nums2)) - 1
provtNum1, provtNum2 := nums1[newIndex1], nums2[newIndex2]
if provtNum1 <= provtNum2 {
k -= (newIndex1 - indexNums1 + 1)
indexNums1 = newIndex1 + 1
} else {
k -= (newIndex2 - indexNums2 + 1)
indexNums2 = newIndex2 + 1
}
}
return 0
}
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
totalLength := len(nums1) + len(nums2)
if totalLength%2 == 1 {
midLenth := totalLength / 2
return float64(getKthElement(nums1, nums2, midLenth + 1))
} else {
midLength1, midLength2 := totalLength / 2 - 1, totalLength / 2
return float64(getKthElement(nums1, nums2, midLength1 + 1) + getKthElement(nums1, nums2, midLength2 + 1)) / 2.0
}
return 0
}
力扣算法——第4题——go语言
Supongo que te gusta
Origin blog.csdn.net/qq_44011116/article/details/121915568
Recomendado
Clasificación