IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> GO / 图解LeetCode 第四题 Median of Two Sorted Arrays -> 正文阅读

[数据结构与算法]GO / 图解LeetCode 第四题 Median of Two Sorted Arrays

作者:recommend-item-box type_blog clearfix

这道题虽然标记Hard,? 但是看完图解你会觉得超级简单。

关键1. 如何找到中间点,通过连个数组长度和的奇偶数来判断,奇数用中间取两次除以二,偶数中间数字和前一个数字,这样无论什么都可以保证返回两个位置简化程序判断。

关键2. 不用循环完所有数组,更不需要把结构在存到新数组里,只需要找到对应中间点的两个值就好了。所以只需要循环次数和最大的中间点位置一致就可以了。

关键3. 遇到空数组,或者某个数组用完,将数值设置为最大整数,简化判断逻辑

下面看图

?代码:

package _4_test

import (
	"fmt"
	"testing"
)

func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
	mid1, mid2 := getMidPointers(len(nums1), len(nums2))
	leftIndex, rightIndex := 0, 0
	leftV, rightV := 0,0
	v, v1, v2 := 0, 0, 0
	MAX_INT := 1<<32-1

	for i := 0; i <= mid2; i++ {
		if leftIndex < len(nums1) {
			leftV = nums1[leftIndex]
		}else{
			leftV = MAX_INT
		}
		if rightIndex < len(nums2) {
			rightV = nums2[rightIndex]
		}else{
			rightV = MAX_INT
		}
		fmt.Printf("left: %v / %v right: %v/%v \n", leftIndex, leftV, rightIndex, rightV)
		if leftV <= rightV {
			leftIndex++
			v = leftV
		} else {
			rightIndex++
			v = rightV
		}
		if mid1 == i {
			v1 = v
		}
		if mid2 == i {
			v2 = v
		}
		fmt.Printf("v1/v2: %v/%v \n", v1,v2)
	}

	return float64(v1+v2) / 2.0
}

func getMidPointers(leftLength int, rightLength int) (int, int) {
	sum := leftLength + rightLength
	if sum < 1 {
		return sum, sum
	}
	isOdd := sum % 2 > 0

	mid := sum/2
	if isOdd {
		return mid, mid
	} else {
		return mid-1, mid
	}
}

type Param struct {
	arg1 []int
	arg2 []int
	rs   float64
}

func TestFun(t *testing.T) {
	ps := []Param{
		{
			arg1: []int{1, 3},
			arg2: []int{2},
			rs:   2.0,
		},
		{
			arg1: []int{1, 2},
			arg2: []int{3, 4},
			rs:   2.5,
		},
		{
			arg1: []int{0, 0},
			arg2: []int{0, 0},
			rs:   0.0,
		},
		{
			arg1: []int{},
			arg2: []int{1},
			rs:   1.0,
		},
		{
			arg1: []int{2},
			arg2: []int{},
			rs:   2.0,
		},
	}

	for index, p := range ps {
		temp := findMedianSortedArrays(p.arg1, p.arg2)
		if temp != p.rs {
			t.Error(index, "-Error")
			t.Logf("expect %v, got %v", p.rs, temp)
		} else {
			t.Logf("pass %v", index)
			t.Logf("expect %v, got %v", p.rs, temp)
		}
	}

}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:50:25  更:2021-09-24 10:51:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:46:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码