[算法]剑指offer p3 二维数组中的查找 golang
2022/2/11 14:12:31
本文主要是介绍[算法]剑指offer p3 二维数组中的查找 golang,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
实例1
使用实例举例子比如下面的矩阵中查找 1
1 2 3 4 2 3 4 5 3 4 5 6 6 7 8 9
如果我们从右上角的 4 开始比较
因为 右上角是一行的最大值和一列的最小值, 如果 target < 右上角, 那么就能排除一列,如果 target > 右上角就能排除一行
(1) 1 < 4 排除一列
1 2 3 2 3 4 3 4 5 6 7 8
(2) 1 < 3 排除一列
1 2 2 3 3 4 6 7
(3) 1 < 2 排除一列
1 2 3 6
(4) 1 == 1 命中, 返回 true
实例2
使用实例举例子比如下面的矩阵中查找 7
1 2 3 4 2 3 4 5 3 4 5 6 6 7 8 9
如果我们从右上角的 4 开始比较
因为 右上角是一行的最大值和一列的最小值, 如果 target < 右上角, 那么就能排除一列,如果 target > 右上角就能排除一行
(1) 7 > 4 排除一行
2 3 4 5 3 4 5 6 6 7 8 9
(2) 7 > 5 排除一行
3 4 5 6 6 7 8 9
(3) 7 > 6 排除一行
6 7 8 9
(4) 7<9 排除一列
6 7 8
(5) 7<8 排除一列
6 7
(6) 7 == 7 命中
golang 代码
//判断整数在有序的二维数组(左到右,上到下递增)中是否存在 func Exists(matrix [][]int, target int) (exists bool) { //参数处理 if len(matrix) == 0 { return } //todo: 保证每个 row 的元素都是一致的, 保证这是一个矩形 //右上角的坐标 x := 0 y := len(matrix[0]) - 1 for { //溢出旧退出没有命中 if y == -1 || x == len(matrix) { return } //命中 if matrix[x][y] == target { return true } //小于 target 减少行 , if matrix[x][y] < target { x++ continue } //大于 target 减少列 if matrix[x][y] > target { y-- continue } } }
测试用例1
package main import ( "testing" "github.com/stretchr/testify/assert" ) func TestP3(t *testing.T) { testDatas := []struct { marix [][]int target int except bool }{ { marix: [][]int{ {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {6, 7, 8, 9}, }, target: 7, except: true, }, } for _, testData := range testDatas { assert.Equal(t, testData.except, Exists(testData.marix, testData.target)) } }
这篇关于[算法]剑指offer p3 二维数组中的查找 golang的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03如何用Google Gemini和MyScaleDB打造一个基于检索增强生成技术的聊天机器人
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享