力扣每日四题
- 163. 缺失的区间-简单
- 1929. 数组串联-简单
- 1304. 和为零的 N 个不同整数-简单
- 2352. 相等行列对-中等
- 总结
163. 缺失的区间-简单
题目描述:
给你一个闭区间 [lower, upper] 和一个 按从小到大排序 的整数数组 nums ,其中元素的范围在闭区间 [lower, upper] 当中。
如果一个数字 x 在 [lower, upper] 区间内,并且 x 不在 nums 中,则认为 x 缺失。
返回 准确涵盖所有缺失数字 的 最小排序 区间列表。也就是说,nums 的任何元素都不在任何区间内,并且每个缺失的数字都在其中一个区间内。
题解:
用两个变量分别指向闭区间和数组,一共只有三种情况分类讨论即可
代码(Go):
func findMissingRanges(nums []int, lower int, upper int) [][]int {i := lowerj := 0re := [][]int{}for i <= upper{if j < len(nums) && i != nums[j]{sce := []int{i,nums[j] - 1}re = append(re,sce)i = nums[j] + 1j++}else if j < len(nums) && i == nums[j]{i++j++}else if i <= upper{sce := []int{i,upper}re = append(re,sce)break}}return re
}
1929. 数组串联-简单
题目描述:
给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:
ans[i] == nums[i]
ans[i + n] == nums[i]
具体而言,ans 由两个 nums 数组 串联 形成。
返回数组 ans 。
题解:
又是一道有竞争力扣最简单题的潜质的一道题,没啥好说的照着写就行
代码(Go):
func getConcatenation(nums []int) []int {l := len(nums)re := make([]int,2*l)for i,v := range nums{re[i] = vre[i + l] = v}return re
}
1304. 和为零的 N 个不同整数-简单
题目描述:
给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。
题解:
核心思路就是前面n-1个数随便填不重复就行,最后一个数填前面所有数的和的负数就可以了
代码(Go):
func sumZero(n int) []int {re := make([]int,n)sum := 0for i := 0;i < n - 1;i++{re[i] = i + 1sum = sum + i + 1}re[n - 1] = -sumreturn re
}
2352. 相等行列对-中等
题目描述:
给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
题解:
一看就是哈希表,问题就是因为切片不能做哈希表的key所以需要改变一下形式,一开始想用数组,但是数组只能用数字做长度,计算出来的长度值不行,最后就通过把切片中的数值转换成字符串的方式建立了哈希表
代码(Go):
func equalPairs(grid [][]int) int {n := len(grid)dict := make(map[string]int)for _,v := range grid {dict[fmt.Sprint(v)]++}re := 0for j := 0; j < n; j++ {arr := make([]int,n)for i := 0; i < n; i++ {arr[i] = grid[i][j]}if v,ok := dict[fmt.Sprint(arr)];ok{re += v}}return re
}
总结
思路都比较简单,就是最后一个题用什么方式做哈希表的索引需要想一下