2481. 分割圆的最少切割次数-简单
题目描述:
圆内一个 有效切割 ,符合以下二者之一:
该切割是两个端点在圆上的线段,且该线段经过圆心。
该切割是一端在圆心另一端在圆上的线段。
给你一个整数 n ,请你返回将圆切割成相等的 n 等分的 最少 切割次数。
题解:
举两个例子就能发现规律,奇数等分需要切割的次数和等分数相等,偶数则除以二
代码(Go):
func numberOfCuts(n int) int {
if n == 1 {
return 0
}
if n % 2 == 0 {
return n / 2
}
return n
}
2248. 多个数组求交集-简单
题目描述:
给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。
题解:
统计每个数字出现的次数,出现次数等于nums中数组数目的元素就是交集,再按顺序放入结果集即可
代码(Go):
func intersection(nums [][]int) []int {
l := len(nums)
arr := [1001]int{}
for _,v := range nums{
for _,value := range v{
arr[value]++
}
}
re := []int{}
for i,v := range arr{
if v == l{
re = append(re,i)
}
}
return re
}
62. 不同路径-中等
题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
题解:
前几天做过跟这个思路完全一样的题,由于移动方向唯一,每个格子的路径就等于左边格子的路径数加上上边格子的路径数
代码(Go):
func uniquePaths(m int, n int) int {
dp := make([][]int,0,m)
for i := 0;i < m;i++{
dpi := make([]int,0,n)
for j := 0;j < n;j++{
temp := 0
if i > 0{
temp += dp[i - 1][j]
}
if j > 0{
temp += dpi[j - 1]
}
if i == 0 && j == 0{
temp = 1
}
dpi = append(dpi,temp)
}
dp = append(dp,dpi)
}
return dp[m - 1][n - 1]
}
64. 最小路径和-中等
题目描述:
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
题解:
跟上一题基本一样,框架我直接拿来用了,其实就相当于上一题加了个权值,比较加权后的路径长度
代码(Go):
func minPathSum(grid [][]int) int {
dp := make([][]int,0,len(grid))
for i := 0;i < len(grid);i++{
dpi := make([]int,0,len(grid[0]))
for j := 0;j < len(grid[0]);j++{
temp := 0
if i > 0 && j > 0{
if dp[i - 1][j] < dpi[j - 1]{
temp = dp[i - 1][j]
}else{
temp = dpi[j - 1]
}
}else if i > 0{
temp += dp[i - 1][j]
}else if j > 0{
temp += dpi[j - 1]
}
dpi = append(dpi,temp + grid[i][j])
}
dp = append(dp,dpi)
}
return dp[len(grid) - 1][len(grid[0]) - 1]
}
总结
两道中等题第一天,做了两道动态规划,这两道还挺简单的,不过感觉同质化有点严重,以后两道中等题尽量不做一个类型的