您现在的位置是:首页 >其他 >从零开始的力扣刷题记录-第四十九天网站首页其他
从零开始的力扣刷题记录-第四十九天
163. 缺失的区间-简单
题目描述:
给你一个闭区间 [lower, upper] 和一个 按从小到大排序 的整数数组 nums ,其中元素的范围在闭区间 [lower, upper] 当中。
如果一个数字 x 在 [lower, upper] 区间内,并且 x 不在 nums 中,则认为 x 缺失。
返回 准确涵盖所有缺失数字 的 最小排序 区间列表。也就是说,nums 的任何元素都不在任何区间内,并且每个缺失的数字都在其中一个区间内。
题解:
用两个变量分别指向闭区间和数组,一共只有三种情况分类讨论即可
代码(Go):
func findMissingRanges(nums []int, lower int, upper int) [][]int {
i := lower
j := 0
re := [][]int{}
for i <= upper{
if j < len(nums) && i != nums[j]{
sce := []int{i,nums[j] - 1}
re = append(re,sce)
i = nums[j] + 1
j++
}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] = v
re[i + l] = v
}
return re
}
1304. 和为零的 N 个不同整数-简单
题目描述:
给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。
题解:
核心思路就是前面n-1个数随便填不重复就行,最后一个数填前面所有数的和的负数就可以了
代码(Go):
func sumZero(n int) []int {
re := make([]int,n)
sum := 0
for i := 0;i < n - 1;i++{
re[i] = i + 1
sum = sum + i + 1
}
re[n - 1] = -sum
return 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 := 0
for 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
}
总结
思路都比较简单,就是最后一个题用什么方式做哈希表的索引需要想一下