Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

简介: Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

278. 第一个错误的版本 First Bad Version

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

示例 1:

输入:n = 5, bad = 4

输出:4

解释:

调用 isBadVersion(3) -> false 
调用 isBadVersion(5) -> true 
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。

示例 2:

输入:n = 1, bad = 1

输出:1


提示:

  • 1 <= bad <= n <= 2^31 - 1

代码1:

func firstBadVersion(n int) int {
    for i := 1; i <= n; i++ {
        if isBadVersion(i) {
            return i
        }
    }
    return n
}

代码2:

func firstBadVersion(n int) int {
    left, right := 1, n
    for left < right {
        mid := left + (right-left)/2
        if isBadVersion(mid) {
            right = mid
        } else {
            left = mid + 1
        }
    }
    return left
}

279. 完全平方数 Perfect Squares

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

示例 1:

输入:n = 12

输出:3

解释:12 = 4 + 4 + 4

示例 2:

输入:n = 13

输出:2

解释:13 = 4 + 9

提示:

  • 1 <= n <= 10^4

代码1:

package main
import "fmt"
func numSquares(n int) int {
    dp := make([]int, n+1)
    for i := 1; i <= n; i++ {
        dp[i] = i
        for j := 1; j*j <= i; j++ {
            dp[i] = min(dp[i], dp[i-j*j]+1)
        }
    }
    return dp[n]
}
func min(x, y int) int {
    if x < y {
        return x
    }
    return y
}
func main() {
  n := 12
  fmt.Println(numSquares(n)) // 输出:3
  n = 13
  fmt.Println(numSquares(n)) // 输出:2
}

代码2:贪心+DFS

package main
import "fmt"
func numSquares(n int) int {
  squares := []int{}
  for i := 1; i*i <= n; i++ {
    squares = append(squares, i*i)
  }
  cnt := 1 << 31
  var dfs func(int, int)
  dfs = func(num, depth int) {
    if depth >= cnt {
      return
    }
    if num == 0 {
      cnt = depth
      return
    }
    for i := len(squares) - 1; i >= 0; i-- {
      if squares[i] <= num {
        dfs(num-squares[i], depth+1)
      }
    }
  }
  dfs(n, 0)
  return cnt
}
func main() {
  n := 12
  fmt.Println(numSquares(n)) // 输出:3
  n = 13
  fmt.Println(numSquares(n)) // 输出:2
}

输出:

3

2


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

6.13生日快乐


目录
相关文章
|
6月前
|
算法 测试技术 C++
【动态规划】【图论】【C++算法】1575统计所有可行路径
【动态规划】【图论】【C++算法】1575统计所有可行路径
|
3月前
|
编译器 C++
VS Code设置C++编译器路径
VS Code设置C++编译器路径
45 0
|
5月前
|
算法 C++
【动态规划】零基础解决路径问题(C++)
【动态规划】零基础解决路径问题(C++)
|
5月前
|
设计模式 算法 程序员
【C++】大气、正规的编程习惯:C++学习路径与注意事项
【C++】大气、正规的编程习惯:C++学习路径与注意事项
65 0
|
5月前
|
C++
C++ 获取当前程序路径
C++ 获取当前程序路径
|
6月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
97 1
Linux 终端操作命令(1)
|
6月前
|
算法 C++
【动态规划】【矩阵】C++算法329矩阵中的最长递增路径
【动态规划】【矩阵】C++算法329矩阵中的最长递增路径
|
6月前
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
93 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
6月前
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
63 0
Linux 终端命令之文件浏览(2) more
|
6月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
87 0
Linux 终端操作命令(3)内部命令用法