从零开始的力扣刷题记录-第四十九天

力扣每日四题

  • 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 := 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
}

总结

思路都比较简单,就是最后一个题用什么方式做哈希表的索引需要想一下

你可能感兴趣的:(leetcode刷题,leetcode,算法,golang)