Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II

news/2024/11/23 5:33:21/

目录

238. 除自身以外数组的乘积 Product of Array Except Self  🌟🌟

240. 搜索二维矩阵 II Search A 2d Matrix ii  🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


238. 除自身以外数组的乘积 Product of Array Except Self

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 10^5
  • -30 <= nums[i] <= 30
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

代码1: 暴力循环

package mainimport 	"fmt"func productExceptSelf(nums []int) []int {n := len(nums)ans := make([]int, n)for i := 0; i < n; i++ {ans[i] = 1for j := 0; j < n; j++ {if j != i {ans[i] *= nums[j]}}}return ans
}func main() {nums := []int{1,2,3,4}fmt.Println(productExceptSelf(nums))nums = []int{-1,1,0,-3,3}fmt.Println(productExceptSelf(nums))
}

代码2: 前缀积和后缀积

package mainimport "fmt"func productExceptSelf(nums []int) []int {n := len(nums)prefix := make([]int, n)suffix := make([]int, n)ans := make([]int, n)prefix[0] = 1for i := 1; i < n; i++ {prefix[i] = prefix[i-1] * nums[i-1]}suffix[n-1] = 1for i := n - 2; i >= 0; i-- {suffix[i] = suffix[i+1] * nums[i+1]}for i := 0; i < n; i++ {ans[i] = prefix[i] * suffix[i]}return ans
}func main() {nums := []int{1, 2, 3, 4}fmt.Println(productExceptSelf(nums))nums = []int{-1, 1, 0, -3, 3}fmt.Println(productExceptSelf(nums))
}

代码3: 优化掉前缀数据的空间

package mainimport "fmt"func productExceptSelf(nums []int) []int {n := len(nums)ans := make([]int, n)ans[0] = 1for i := 1; i < n; i++ {ans[i] = ans[i-1] * nums[i-1]}suffix := 1for i := n-1; i >= 0; i-- {ans[i] *= suffixsuffix *= nums[i]}return ans
}func main() {nums := []int{1, 2, 3, 4}fmt.Println(productExceptSelf(nums))nums = []int{-1, 1, 0, -3, 3}fmt.Println(productExceptSelf(nums))
}

输出:

[24 12 8 6]
[0 0 9 0 0]


240. 搜索二维矩阵 II Search A 2d Matrix ii

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

示例 1:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -10^9 <= matrix[i][j] <= 10^9
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -10^9 <= target <= 10^9

相关题目:

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

代码1: 暴力法

package mainimport "fmt"func searchMatrix(matrix [][]int, target int) bool {m := len(matrix)n := len(matrix[0])for i := 0; i < m; i++ {for j := 0; j < n; j++ {if matrix[i][j] == target {return true}}}return false
}func main() {matrix := [][]int{{1, 4, 7, 11, 15},{2, 5, 8, 12, 19},{3, 6, 9, 16, 22},{10, 13, 14, 17, 24},{18, 21, 23, 26, 30}}fmt.Println(searchMatrix(matrix, 5))fmt.Println(searchMatrix(matrix, 20))
}

代码2: 缩小搜索范围

package mainimport "fmt"func searchMatrix(matrix [][]int, target int) bool {m := len(matrix)n := len(matrix[0])i, j := 0, n-1for i < m && j >= 0 {if matrix[i][j] == target {return true} else if matrix[i][j] < target {i++} else {j--}}return false
}func main() {matrix := [][]int{{1, 4, 7, 11, 15},{2, 5, 8, 12, 19},{3, 6, 9, 16, 22},{10, 13, 14, 17, 24},{18, 21, 23, 26, 30}}fmt.Println(searchMatrix(matrix, 5))fmt.Println(searchMatrix(matrix, 20))
}

代码3: 二分查找

package mainimport "fmt"func searchMatrix(matrix [][]int, target int) bool {m, n := len(matrix), len(matrix[0])if m == 0 || n == 0 {return false}left, right := 0, m*n-1for left <= right {mid := left + (right-left)/2row, col := mid/n, mid%nif matrix[row][col] == target {return true} else if matrix[row][col] < target {left = mid + 1} else {right = mid - 1}}return false
}func main() {matrix := [][]int{{1, 4, 7, 11, 15},{2, 5, 8, 12, 19},{3, 6, 9, 16, 22},{10, 13, 14, 17, 24},{18, 21, 23, 26, 30}}fmt.Println(searchMatrix(matrix, 5))fmt.Println(searchMatrix(matrix, 20))
}

输出:

true
false


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更


http://www.ppmy.cn/news/235662.html

相关文章

2023-06-02 stonedb-修改包含内连接的嵌套外连接-问题反思

摘要: 最近在搞一个列存储引擎的包含内连接的嵌套外连接过慢的问题, 连接执行过慢的原因分析见此前的博客分析, 虽然逻辑很绕, 但是也不是无法分析. 更麻烦的问题在于修改查询计划, 让其能按照代价更小的方式正确的执行. 遇到的问题比我在修改查询计划前设想的更为棘手, 本文…

freeRTOS学习(四)

队列管理 队列提供了任务到任务、任务到中断和中断到任务的通信机制。 队列的特征 数据存储 队列可以保存有限数量的固定大小的数据项。一个队列所能容纳的最大条目数称为它的长度。每个数据项的长度和大小都在创建队列时设置。 队列通常用作先进先出&#xff08;FIFO&…

谷歌浏览器+WIN10系统兼容问题(谷歌浏览器64位崩溃问题)

1、找到谷歌浏览器桌面快捷方式&#xff0c;右键属性 2、在目标选项 地址后面添加 --test-type --no-sandbox

谷歌浏览器64位浏览器网页显示不完全修改方法

设置里面 chrome://flags/ 启用DirectWrite 把这个选项关闭掉就可以显示文字了&#xff0c;新版的DEV好像64位的这个情况&#xff01;

火狐浏览器firefox 64位 官方离线版下载(可更改安装路径)

百度网盘链接: https://pan.baidu.com/s/1lYAyuYwiDy8ll7JEzu8XAg 提取码: mcq6

linux 32位浏览器下载,Chrome 浏览器32位、64位下载地址大全

随着最近64位版本的 Chrome 浏览器正式版的推出&#xff0c;Chrome 浏览器再次受到广大浏览迷的重点关注&#xff0c;今天我们就整理一下各版本的 Chrome 浏览器 32位及64位的下载地址&#xff0c;方便各位浏览迷选择和现在。 到目前为止&#xff0c;Chrome 浏览器主要包括 Sta…

32位谷歌浏览器的下载网址

谷歌官网不给你下载win32位的浏览器&#xff0c;只给了一个64位的 想用chromeweb driver又必须是32位的。 用这个&#xff1a;https://www.google.com/intl/en/chrome/?standalone1&platformwin 这个貌似也没用&#xff0c;我点开下载他不出来界面。。。

怎么找到Windows 64位的操作系统里的32位的IE浏览器?

1.我的电脑——打开C盘 2.打开C盘里的Program Files(x86)文件夹 3. 在Program Files(x86)文件夹下找到Internet Explorer 4.在Internet Explorer文件夹里找到iexplore.exe&#xff0c;创建快捷方式。&#xff08;如果创建快捷方式后不能自动保存到桌面的直拖到桌面即可&#xf…