目录
195. 第十行 Tenth Line 🌟
198. 打家劫舍 I House Robber 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
195. 第十行 Tenth Line
给定一个文本文件 file.txt
,请只打印这个文件中的第十行。
示例:
假设 file.txt
有如下内容:
Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
你的脚本应当显示第十行:
Line 10
说明:
1. 如果文件少于十行,你应当输出什么?
2. 至少有三种不同的解法,请尝试尽可能多的方法来解题。
代码:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("file.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
lineCount := 0
for scanner.Scan() {
lineCount++
if lineCount == 10 {
fmt.Println(scanner.Text())
return
}
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading file error:", err)
}
}
调用系统命令:
awk 'NR == 10' file.txt
tail -n +10 file.txt | head -n 1
sed -n '10p' file.txt
grep '' file.txt | sed -n '10p'
调用代码:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("awk", "NR==10", "file.txt")
output, err := cmd.Output()
if err != nil {
fmt.Println(err)
}
fmt.Print(string(output))
}
198. 打家劫舍 House Robber
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:
输入:[2,7,9,3,1] 输出:12 解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 400
代码1: 动态规划
package main
import "fmt"
func rob(nums []int) int {
n := len(nums)
if n == 0 {
return 0
}
dp := make([]int, n+1)
dp[1] = nums[0]
for i := 2; i <= n; i++ {
dp[i] = max(dp[i-1], dp[i-2]+nums[i-1])
}
return dp[n]
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
func main() {
nums := []int{1, 2, 3, 1}
fmt.Println(rob(nums))
nums = []int{2, 7, 9, 3, 1}
fmt.Println(rob(nums))
}
其它写法:
```golang
func rob(nums []int) int {
if len(nums) == 0 {
return 0
}
if len(nums) == 1 {
return nums[0]
}
dp := make([]int, len(nums))
dp[0] = nums[0]
dp[1] = max(nums[0], nums[1])
for i := 2; i < len(nums); i++ {
dp[i] = max(dp[i-2]+nums[i], dp[i-1])
}
return dp[len(nums)-1]
}
```
代码2: 使用滚动数组优化空间
package main
import "fmt"
func rob(nums []int) int {
n := len(nums)
if n == 0 {
return 0
}
var pre, cur int
cur = nums[0]
for i := 2; i <= n; i++ {
cur, pre = max(pre+nums[i-1], cur), cur
}
return cur
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
func main() {
nums := []int{1, 2, 3, 1}
fmt.Println(rob(nums))
nums = []int{2, 7, 9, 3, 1}
fmt.Println(rob(nums))
}
代码3: 递归+记忆化搜索
package main
import "fmt"
func rob(nums []int) int {
mem := make([]int, len(nums))
for i := 0; i < len(mem); i++ {
mem[i] = -1
}
return helper(nums, mem, len(nums)-1)
}
func helper(nums []int, mem []int, i int) int {
if i < 0 {
return 0
}
if mem[i] >= 0 {
return mem[i]
}
res := max(helper(nums, mem, i-2)+nums[i], helper(nums, mem, i-1))
mem[i] = res
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
nums := []int{1, 2, 3, 1}
fmt.Println(rob(nums))
nums = []int{2, 7, 9, 3, 1}
fmt.Println(rob(nums))
}
输出:
4
12
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |