Golang每日一练(leetDay0025)

目录

73. 矩阵置零 Set Matrix Zeroes  🌟🌟

74. 搜索二维矩阵 Search A 2d-Matrix  🌟🌟

75. 颜色分类 Sort Colors  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


73. 矩阵置零 Set Matrix Zeroes

给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -2^31 <= matrix[i][j] <= 2^31 - 1

进阶:

  • 一个直观的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个仅使用常量空间的解决方案吗?

代码1:

package main

import (
	"fmt"
)

func setZeroes(matrix [][]int) {
	m, n := len(matrix), len(matrix[0])
	row, col := make([]bool, m), make([]bool, n)
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			if matrix[i][j] == 0 {
				row[i], col[j] = true, true
			}
		}
	}
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			if row[i] || col[j] {
				matrix[i][j] = 0
			}
		}
	}
}

func main() {
	matrix := [][]int{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}
	setZeroes(matrix)
	fmt.Println(matrix)
	matrix = [][]int{{0, 1, 2, 0}, {3, 4, 5, 2}, {1, 3, 1, 5}}
	setZeroes(matrix)
	fmt.Println(matrix)
}

输出:

[[1 0 1] [0 0 0] [1 0 1]]
[[0 0 0 0] [0 4 5 0] [0 3 1 0]]

 代码2:

package main

import (
	"fmt"
)

func setZeroes(matrix [][]int) {
	m, n := len(matrix), len(matrix[0])
	row0, col0 := false, false
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			if matrix[i][j] == 0 {
				if i == 0 {
					row0 = true
				}
				if j == 0 {
					col0 = true
				}
				matrix[0][j], matrix[i][0] = 0, 0
			}
		}
	}
	for i := 1; i < m; i++ {
		for j := 1; j < n; j++ {
			if matrix[i][0] == 0 || matrix[0][j] == 0 {
				matrix[i][j] = 0
			}
		}
	}
	if row0 {
		for j := 0; j < n; j++ {
			matrix[0][j] = 0
		}
	}
	if col0 {
		for i := 0; i < m; i++ {
			matrix[i][0] = 0
		}
	}
}

func main() {
	matrix := [][]int{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}
	setZeroes(matrix)
	fmt.Println(matrix)
	matrix = [][]int{{0, 1, 2, 0}, {3, 4, 5, 2}, {1, 3, 1, 5}}
	setZeroes(matrix)
	fmt.Println(matrix)
}

74. 搜索二维矩阵 Search A 2d-Matrix

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -10^4 <= matrix[i][j], target <= 10^4

代码1:

package main

import (
	"fmt"
)

func searchMatrix(matrix [][]int, target int) bool {
	m, n := len(matrix), len(matrix[0])
	l, r := 0, m*n-1
	for l <= r {
		mid := (l + r) >> 1
		if matrix[mid/n][mid%n] == target {
			return true
		} else if matrix[mid/n][mid%n] < target {
			l = mid + 1
		} else {
			r = mid - 1
		}
	}
	return false
}

func main() {
	matrix := [][]int{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}
	fmt.Println(searchMatrix(matrix, 3))
	fmt.Println(searchMatrix(matrix, 13))
}

输出:

true
false

代码2:

package main

import (
	"fmt"
)

func searchMatrix(matrix [][]int, target int) bool {
	m, n := len(matrix), len(matrix[0])
	l, r := 0, m-1
	for l <= r {
		mid := (l + r) >> 1
		if matrix[mid][0] == target {
			return true
		} else if matrix[mid][0] < target {
			l = mid + 1
		} else {
			r = mid - 1
		}
	}
	if r < 0 {
		return false
	}
	row := r
	l, r = 0, n-1
	for l <= r {
		mid := (l + r) >> 1
		if matrix[row][mid] == target {
			return true
		} else if matrix[row][mid] < target {
			l = mid + 1
		} else {
			r = mid - 1
		}
	}
	return false
}

func main() {
	matrix := [][]int{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}
	fmt.Println(searchMatrix(matrix, 3))
	fmt.Println(searchMatrix(matrix, 13))
}

75. 颜色分类 Sort Colors

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库的sort函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i] 为 01 或 2

进阶:

  • 你可以不使用代码库中的排序函数来解决这道题吗?
  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

 代码1:

package main

import (
	"fmt"
)

func sortColors(nums []int) {
	count := make([]int, 3)
	for _, num := range nums {
		count[num]++
	}
	index := 0
	for i := 0; i < 3; i++ {
		for j := 0; j < count[i]; j++ {
			nums[index] = i
			index++
		}
	}
}

func main() {
	nums := []int{2, 0, 2, 1, 1, 0}
	sortColors(nums)
	fmt.Println(nums)
	nums = []int{2, 0, 1}
	sortColors(nums)
	fmt.Println(nums)
}

代码2:

package main

import (
	"fmt"
)

func sortColors(nums []int) {
	index := 0
	for i := 0; i < len(nums); i++ {
		if nums[i] == 0 {
			nums[i], nums[index] = nums[index], nums[i]
			index++
		}
	}
	for i := index; i < len(nums); i++ {
		if nums[i] == 1 {
			nums[i], nums[index] = nums[index], nums[i]
			index++
		}
	}
}

func main() {
	nums := []int{2, 0, 2, 1, 1, 0}
	sortColors(nums)
	fmt.Println(nums)
	nums = []int{2, 0, 1}
	sortColors(nums)
	fmt.Println(nums)
}

代码3:

package main

import (
	"fmt"
)

func sortColors(nums []int) {
	left, right := 0, len(nums)-1
	for i := 0; i <= right; i++ {
		if nums[i] == 0 {
			nums[i], nums[left] = nums[left], nums[i]
			left++
		} else if nums[i] == 2 {
			nums[i], nums[right] = nums[right], nums[i]
			right--
			i--
		}
	}
}

func main() {
	nums := []int{2, 0, 2, 1, 1, 0}
	sortColors(nums)
	fmt.Println(nums)
	nums = []int{2, 0, 1}
	sortColors(nums)
	fmt.Println(nums)
}

输出:

[0 0 1 1 2 2]
[0 1 2]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6132.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据领域的发展及其对现实世界的价值

大数据已经成为全球各行业领域不可或缺的一部分&#xff0c;并且其应用不断涌现。尽管很多人最初对“大数据”这一术语表示怀疑和不信任&#xff0c;但大数据技术已经确立了稳定的发展方向。根据调研机构的预测&#xff0c;到2027年&#xff0c;全球大数据市场规模将达到1090亿…

PostgreSQL之Full VACUUM

前面我们介绍了PG中的Concurrent VACUUM&#xff0c;详细请参考PostgreSQL之Concurrent VACUUM&#xff0c;这篇我们继续来了解一下PG中的Full VACUUM。 我们了解Concurrent VACUUM允许在执行的时候仍然允许对正在VACUUM的表进行读取操作&#xff0c;因此这个操作对业务的影响也…

学成在线:第五天(p82-p93)

1、面试&#xff1a;在分片广播中&#xff0c;如何保证多个执行器不会重复执行任务&#xff1f; &#xff08;虽然有分片序号&#xff0c;但是加入只有两个执行器&#xff0c;有很多任务&#xff0c;这两个执行器得到的分片序号也就只是两个数字&#xff0c;后面的分片是如何能…

蓝桥杯刷题冲刺 | 倒计时11天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.质因子2.蓝桥王国1.质因子 题目 链接&#xff1a; 1545. 质因子 - AcWing题库 给定一个整数 N…

NexNoSQL Client:Elasticsearch、Redis、MongoDB三合一的可视化客户端管理工具

背景&#xff1a; 工作中我们使用了Elasticsearch作为存储&#xff0c;来支持内容的搜索&#xff0c;Elasticsearch这个软件大家都耳熟能详&#xff0c;它是一个分布式、高扩展、高实时的搜索与数据分析引擎&#xff0c;不仅仅支持文本索引&#xff0c;还支持聚合操作&#xf…

Java面向对象部分 个人学习记录

注:此博客是个人学习记录&#xff0c;会有错的地方&#xff0c;面向对象部分我可能会画很多图来加深我的理解 不引出了&#xff0c;直接开始 class Dog{String name;int age;String type;public Dog(String name,int age,String type){this.namename;this.ageage;this.typetyp…

全志V3S嵌入式驱动开发(准备)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 要学好嵌入式&#xff0c;其实最好自己可以画板子、调试板子、写软件、调试软件这样来学习。简单的51单片机、stm32这样的mcu或许画起来不是很复杂…

Python 自动化指南(繁琐工作自动化)第二版:零、前言

关于作者 Al Sweigart 是一名软件开发人员和技术书籍作者。Python 是他最喜欢的编程语言&#xff0c;他是该语言的几个开源模块的开发者。他的其他书籍可以在他的网站上根据知识共享许可免费获得。他的猫现在重 11 磅。 关于技术评审 Philip James 从事 Python 工作已经超过…

MobTech 秒验|本机号码一键登录会泄露隐私吗

本机号码一键登录是一种新型的应用登录方式&#xff0c;它可以利用运营商的数据网关认证能力&#xff0c;实现手机号免密登录&#xff0c;提高用户体验和转化率&#xff0c;降低验证成本和流失率。本机号码一键登录支持三大运营商号码认证&#xff0c;3秒内完成手机号验证&…

Java小课堂:自定义注解(案例:自定义DecimalFormat注解)

文章目录 引言I 预备知识1.1 元注解1.2 Target注解的ElementType枚举1.3 Retention注解的RetentionPolicy枚举II 自定义注解2.1 基本条件2.2 注解自定义属性的格式III 案例3.1 自定义DecimalFormat注解3.2 自定义json序列化解析引言 需求: 编辑费率限制的值时填写几位就保存几…

如何在前端中实现精美的图片和文字的垂直对齐

&#x1f31f;所属专栏&#xff1a;前端只因变凤凰之路 &#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚 &#x1f62e;前言&#xff1a;该系列将持续更新前端的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步~&#x1f449;文章…

关于线性与条带化下LVM增加磁盘数据分布的讨论

关于线性与条带化下LVM增加磁盘数据分布的讨论一、环境介绍二、线性模式逻辑卷创建逻辑卷删除三、条带化逻辑卷创建逻辑卷删除LVM有两种模式&#xff1a;线性模式&#xff1a;先写满组成线性逻辑卷的第一个物理卷&#xff0c;再向第2个物理卷中写入数据&#xff0c;以此类推&am…

必看>>>>Linux数据库被其他服务器远程访问(修改权限、开设端口)

目录 一&#xff1a;修改权限 1.1 进入Linux数据库 1.2 修改数据库的远程连接权限 1.2.1 数据库远程权限修改命令 1.2.2 数据库远程权限查看命名 1.3 给Linux机添加端口 1.4 远程数据库连接 注意mysql中的中英文输入 一&#xff1a;修改权限 1.1 进入Linux数据库 文章…

【职场热点】软件测试岗位,真正达到月收入1万以上的有多少

在某一线城市相亲角&#xff0c;有位阿姨自称孩子是程序员、36岁、月入3万8&#xff0c;并直言“月入1万如讨饭”&#xff0c;引来大量互联网人自嘲式认领“乞丐”身份。今年2月&#xff0c;“月收入一万”的鄙视链压力给到了二线城市&#xff0c;有位入行2年的软件测试员发帖称…

1-python基础

1.字面量 被写在代码中固定的值 2.注释 # 单行注释""" 多行注释1&#xff1a;三对双引号 """ 多行注释2&#xff1a;三对单引号 3.变量与输出 age10 # 变量赋值 print("我今年",age,"岁") &#xff08;1&#xff09;pri…

Java数据类型与变量

1.字面常量 public class Demo{ public static void main(String[] args){ System.Out.println("hello world!"); System.Out.println(300); System.Out.println(3.1415926); System.Out.println(T); System.Out.println(true); System.Out.println(false); } 其中…

【CocosCreator入门】CocosCreator组件 | ParticleSystem (粒子)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中ParticleSystem组件是一个用于创建粒子效果的工具&#xff0c;可用于实现火花、爆炸、雪花等效果。 目录 一、组件属性 二、组件使用 三、效果演示 四、性能优化 一、组件属性 属性…

迅为3A5000_7A2000工控主板,龙芯自主指令集架构全国产工业级板卡性能

迅为iTOP-3A5000开发板核心板底板方式&#xff0c;底板资料开源&#xff0c;提供底板的原理图和PCB工程文件&#xff0c;可以根据需求定制属于自己的开发板。 核心板也支持工业级核心板定制开发。 根据二进制翻译功能使用&#xff0c;可流畅运行WIN和Android系统APP。 支持Loo…

renderdoc resource manager说明

*写在前面 只针对renderdoc opengl es 场景进行说明&#xff0c; vukan的没有&#xff0c;不过其实应该也差不多啦&#xff0c;若有必要后面再考虑补上。本文使用 文字图代码 的方式叙述&#xff0c;若只想了解原理过程&#xff0c;可忽略代码部分&#xff0c; 由于renderdoc代…

文章生成器-免费的文章生成器

随着信息爆炸的时代&#xff0c;自媒体人员不仅需要创造性的策略&#xff0c;还需要快速产生具有高质量文章的能力&#xff0c;这样才能快速响应趋势并保持优势。文章生成器&#xff0c;一款基于人工智能和自然语言处理技术的文本生成软件&#xff0c;可在没有任何人工干预的情…
最新文章