力扣算法——第4题——go语言

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
}

Supongo que te gusta

Origin blog.csdn.net/qq_44011116/article/details/121915568
Recomendado
Clasificación