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
}
总结
经典的被动态规划干碎的一天,感觉需要看看书了,硬刷题刷不下去了,明天开始看书!