从零开始的力扣刷题记录-第八十五天

力扣每日四题

  • 2544. 交替数字和-简单
  • 2319. 判断矩阵是否是一个 X 矩阵-简单
  • 80. 删除有序数组中的重复项 II-中等
  • 274. H 指数-中等
  • 总结

2544. 交替数字和-简单

题目描述:
给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号:
最高有效位 上的数字分配到 正 号。
剩余每位上数字的符号都与其相邻数字相反。
返回所有数字及其对应符号的和。

题解:
转为字符串再逐位计算即可

代码(Go):

func alternateDigitSum(n int) int {
    num := strconv.Itoa(n)
    re := 0
    flag := 1
    for _,v := range num{
        if flag == 1{
            re += int(v - 48)
            flag = 0
        }else{
            re -= int(v - 48)
            flag = 1
        }
    }
    return re
}

2319. 判断矩阵是否是一个 X 矩阵-简单

题目描述:
如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :
矩阵对角线上的所有元素都 不是 0
矩阵中所有其他元素都是 0
给你一个大小为 n x n 的二维整数数组 grid ,表示一个正方形矩阵。如果 grid 是一个 X 矩阵 ,返回 true ;否则,返回 false 。

题解:
按题意模拟即可

代码(Go):

func checkXMatrix(grid [][]int) bool {
    for i,v := range grid{
        for j,num := range v{
            if (i == j || i + j == len(grid) - 1) && num == 0{
                return false
            }else if i != j && i + j != len(grid) - 1 && num != 0{
                return false
            }
        }
    }
    return true
}

80. 删除有序数组中的重复项 II-中等

题目描述:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

题解:
用两个指针,一个指向删除后数组的新数据的位置,一个指向原数组的新数据的位置,如果出现次数不超过两次就将数据放入删除后的数组,否则跳过

代码(Go):

func removeDuplicates(nums []int) int {
    n := len(nums)
    if n <= 2 {
        return n
    }
    p,q := 2,2
    for q < n{
        if nums[p - 2] != nums[q]{
            nums[p] = nums[q]
            p++
        }
        q++
    }
    return p
}

274. H 指数-中等

题目描述:
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用 h 次。如果 h 有多种可能的值,h 指数 是其中最大的那个。

题解:
计数排序后从高到低遍历,统计高于sum引用次数的论文数num,当sum小于num时,说明num-1是最大h指数,如果sum一直大于num,说明论文数num就是最大h指数

代码(Go):

func hIndex(citations []int) int {
    arr := [1001]int{}
    for _,v := range citations{
        arr[v]++
    }
    sum := 0
    num := 0
    for i := 1000;i >= 0;i--{
        temp := arr[i]
        for temp > 0{
            num++
            sum = i
            if sum == num{
                return num
            }else if sum < num{
                return num - 1
            }
            temp--
        }
    }
    if sum > num{
        return num
    }
    return 0
}

总结

经典的被动态规划干碎的一天,感觉需要看看书了,硬刷题刷不下去了,明天开始看书!

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