Golang每日一练(leetDay0047)
目录
138. 复制带随机指针的链表 Copy List with Random-pointer 🌟🌟
139. 单词拆分 Word Break 🌟🌟
140. 单词拆分 II Word Break II 🌟🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
138. 复制带随机指针的链表 Copy List with Random-pointer
给你一个长度为 n
的链表,每个节点包含一个额外增加的随机指针 random
,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n
个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next
指针和 random
指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
例如,如果原链表中有 X
和 Y
两个节点,其中 X.random --> Y
。那么在复制链表中对应的两个节点 x
和 y
,同样有 x.random --> y
。
返回复制链表的头节点。
用一个由 n
个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val,random_index]
表示:
val
:一个表示Node.val
的整数。random_index
:随机指针指向的节点索引(范围从0
到n-1
);如果不指向任何节点,则为null
。
你的代码 只 接受原链表的头节点 head
作为传入参数。
示例 1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
示例 2:
输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1]]
示例 3:
输入:head = [[3,null],[3,0],[3,null]] 输出:[[3,null],[3,0],[3,null]]
提示:
0 <= n <= 1000
-10^4 <= Node.val <= 10^4
Node.random
为null
或指向链表中的节点。
代码1: 直接在节点结构里增加Index属性
package mainimport "fmt"const null = -1 << 31type Node struct {Val intNext *NodeRandom *NodeIndex int
}func createNode(val int) *Node {return &Node{Val: val,Next: nil,Random: nil,}
}func buildRandomList(nums [][]int) *Node {if len(nums) == 0 {return nil}nodes := make([]*Node, len(nums))for i := 0; i < len(nums); i++ {nodes[i] = &Node{Val: nums[i][0], Index: i}}for i := 0; i < len(nums); i++ {if nums[i][1] != null {nodes[i].Random = nodes[nums[i][1]]}if i < len(nums)-1 {nodes[i].Next = nodes[i+1]}}return nodes[0]
}func traverseList(head *Node) {if head == nil {return}visited := make(map[*Node]bool)cur := headfmt.Print("[")for cur != nil {fmt.Print("[")fmt.Printf("%d,", cur.Val)if cur.Random != nil {fmt.Printf("%d", cur.Random.Index)} else {fmt.Print("null")}fmt.Print("]")visited[cur] = trueif cur.Next != nil && !visited[cur.Next] {fmt.Print(",")cur = cur.Next} else {break}}fmt.Println("]")
}func copyRandomList(head *Node) *Node {if head == nil {return nil}cur := headfor cur != nil {copy := &Node{cur.Val, cur.Next, nil, cur.Index}cur.Next = copycur = copy.Next}cur = headfor cur != nil {if cur.Random != nil {cur.Next.Random = cur.Random.Next}cur = cur.Next.Next}newHead := head.Nextcur = headfor cur != nil {copy := cur.Nextcur.Next = copy.Nextif copy.Next != nil {copy.Next = copy.Next.Next}cur = cur.Next}return newHead
}func copyRandomList2(head *Node) *Node {if head == nil {return nil}m := make(map[*Node]*Node)cur := headfor cur != nil {m[cur] = &Node{cur.Val, nil, nil, cur.Index}cur = cur.Next}cur = headfor cur != nil {m[cur].Next = m[cur.Next]m[cur].Random = m[cur.Random]cur = cur.Next}return m[head]
}func main() {nodes := [][]int{{7, null}, {13, 0}, {11, 4}, {10, 2}, {1, 0}}head := buildRandomList(nodes)traverseList(head)head = copyRandomList(head)traverseList(head)nodes = [][]int{{1, 1}, {2, 1}}head = buildRandomList(nodes)traverseList(head)head = copyRandomList(head)traverseList(head)nodes = [][]int{{3, null}, {3, 0}, {3, null}}head = buildRandomList(nodes)traverseList(head)head = copyRandomList(head)traverseList(head)
}
代码2: 增加getIndex()函数获取Index索引号
func getIndex(node *Node, head *Node) int
package mainimport ("fmt""strings"
)const null = -1 << 31type Node struct {Val intNext *NodeRandom *Node
}func createNode(val int) *Node {return &Node{Val: val,Next: nil,Random: nil,}
}func buildRandomList(nums [][]int) *Node {if len(nums) == 0 {return nil}nodes := make([]*Node, len(nums))for i := 0; i < len(nums); i++ {nodes[i] = &Node{Val: nums[i][0]}}for i := 0; i < len(nums); i++ {if nums[i][1] != null {nodes[i].Random = nodes[nums[i][1]]}if i < len(nums)-1 {nodes[i].Next = nodes[i+1]}}return nodes[0]
}func traverseList(head *Node) [][]int {if head == nil {return nil}visited := make(map[*Node]bool)cur := headres := make([][]int, 0)for cur != nil {visited[cur] = truerandomIndex := nullif cur.Random != nil {randomIndex = getIndex(cur.Random, head)}res = append(res, []int{cur.Val, randomIndex})if cur.Next != nil && !visited[cur.Next] {cur = cur.Next} else {break}}return res
}func getIndex(node *Node, head *Node) int {index := 0cur := headfor cur != node {index++cur = cur.Next}return index
}func copyRandomList(head *Node) *Node {if head == nil {return nil}cur := headfor cur != nil {copy := &Node{cur.Val, cur.Next, nil}cur.Next = copycur = copy.Next}cur = headfor cur != nil {if cur.Random != nil {cur.Next.Random = cur.Random.Next}cur = cur.Next.Next}newHead := head.Nextcur = headfor cur != nil {copy := cur.Nextcur.Next = copy.Nextif copy.Next != nil {copy.Next = copy.Next.Next}cur = cur.Next}return newHead
}func copyRandomList2(head *Node) *Node {if head == nil {return nil}m := make(map[*Node]*Node)cur := headfor cur != nil {m[cur] = &Node{cur.Val, nil, nil}cur = cur.Next}cur = headfor cur != nil {m[cur].Next = m[cur.Next]m[cur].Random = m[cur.Random]cur = cur.Next}return m[head]
}func Array2DToString(array [][]int) string {if len(array) == 0 {return "[]"}arr2str := func(arr []int) string {res := "["for i := 0; i < len(arr); i++ {if arr[i] == null {res += "null"} else {res += fmt.Sprint(arr[i])}if i != len(arr)-1 {res += ","}}return res + "]"}res := make([]string, len(array))for i, arr := range array {res[i] = arr2str(arr)}return strings.Join(strings.Fields(fmt.Sprint(res)), ",")
}func main() {nodes := [][]int{{7, null}, {13, 0}, {11, 4}, {10, 2}, {1, 0}}head := buildRandomList(nodes)fmt.Println(Array2DToString(traverseList(head)))head = copyRandomList(head)fmt.Println(Array2DToString(traverseList(head)))nodes = [][]int{{1, 1}, {2, 1}}head = buildRandomList(nodes)fmt.Println(Array2DToString(traverseList(head)))head = copyRandomList(head)fmt.Println(Array2DToString(traverseList(head)))nodes = [][]int{{3, null}, {3, 0}, {3, null}}head = buildRandomList(nodes)fmt.Println(Array2DToString(traverseList(head)))head = copyRandomList(head)fmt.Println(Array2DToString(traverseList(head)))
}
输出:
[[7,null],[13,0],[11,4],[10,2],[1,0]]
[[7,null],[13,0],[11,4],[10,2],[1,0]]
[[1,1],[2,1]]
[[1,1],[2,1]]
[[3,null],[3,0],[3,null]]
[[3,null],[3,0],[3,null]]
139. 单词拆分 Word Break
给你一个字符串 s
和一个字符串列表 wordDict
作为字典。请你判断是否可以利用字典中出现的单词拼接出 s
。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。
示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。
示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false
提示:
1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s
和wordDict[i]
仅有小写英文字母组成wordDict
中的所有字符串 互不相同
代码1: 暴力枚举
package mainimport ("fmt"
)func wordBreak(s string, wordDict []string) bool {return helper(s, wordDict)
}func helper(s string, wordDict []string) bool {if s == "" {return true}for i := 1; i <= len(s); i++ {if contains(wordDict, s[:i]) && helper(s[i:], wordDict) {return true}}return false
}func contains(wordDict []string, s string) bool {for _, word := range wordDict {if word == s {return true}}return false
}func main() {s := "leetcode"wordDict := []string{"leet", "code"}fmt.Println(wordBreak(s, wordDict))s = "applepenapple"wordDict = []string{"apple", "pen"}fmt.Println(wordBreak(s, wordDict))s = "catsandog"wordDict = []string{"cats", "dog", "sand", "and", "cat"}fmt.Println(wordBreak(s, wordDict))
}
代码2: 记忆化搜索
package mainimport ("fmt"
)func wordBreak(s string, wordDict []string) bool {memo := make([]int, len(s))for i := range memo {memo[i] = -1}return helper(s, wordDict, memo)
}func helper(s string, wordDict []string, memo []int) bool {if s == "" {return true}if memo[len(s)-1] != -1 {return memo[len(s)-1] == 1}for i := 1; i <= len(s); i++ {if contains(wordDict, s[:i]) && helper(s[i:], wordDict, memo) {memo[len(s)-1] = 1return true}}memo[len(s)-1] = 0return false
}func contains(wordDict []string, s string) bool {for _, word := range wordDict {if word == s {return true}}return false
}func main() {s := "leetcode"wordDict := []string{"leet", "code"}fmt.Println(wordBreak(s, wordDict))s = "applepenapple"wordDict = []string{"apple", "pen"}fmt.Println(wordBreak(s, wordDict))s = "catsandog"wordDict = []string{"cats", "dog", "sand", "and", "cat"}fmt.Println(wordBreak(s, wordDict))
}
代码3: 动态规划
package mainimport ("fmt"
)func wordBreak(s string, wordDict []string) bool {n := len(s)dp := make([]bool, n+1)dp[0] = truefor i := 1; i <= n; i++ {for j := 0; j < i; j++ {if dp[j] && contains(wordDict, s[j:i]) {dp[i] = truebreak}}}return dp[n]
}func contains(wordDict []string, s string) bool {for _, word := range wordDict {if word == s {return true}}return false
}func main() {s := "leetcode"wordDict := []string{"leet", "code"}fmt.Println(wordBreak(s, wordDict))s = "applepenapple"wordDict = []string{"apple", "pen"}fmt.Println(wordBreak(s, wordDict))s = "catsandog"wordDict = []string{"cats", "dog", "sand", "and", "cat"}fmt.Println(wordBreak(s, wordDict))
}
输出:
true
true
false
140. 单词拆分 II Word Break II
给定一个字符串 s
和一个字符串字典 wordDict
,在字符串 s
中增加空格来构建一个句子,使得句子中所有的单词都在词典中。以任意顺序 返回所有这些可能的句子。
注意:词典中的同一个单词可能在分段中被重复使用多次。
示例 1:
输入:s = "catsanddog", wordDict = ["cat","cats","and","sand","dog"] 输出:["cats and dog","cat sand dog"]
示例 2:
输入:s = "pineapplepenapple", wordDict = ["apple","pen","applepen","pine","pineapple"] 输出:["pine apple pen apple","pineapple pen apple","pine applepen apple"] 解释: 注意你可以重复使用字典中的单词。
示例 3:
输入:s = "catsandog", wordDict = ["cats","dog","sand","and","cat"] 输出:[]
提示:
1 <= s.length <= 20
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 10
s
和wordDict[i]
仅有小写英文字母组成wordDict
中所有字符串都 不同
代码1: 回溯法
package mainimport ("fmt""strings"
)func wordBreak(s string, wordDict []string) []string {// 构建字典dict := make(map[string]bool)for _, word := range wordDict {dict[word] = true}// 回溯函数var res []stringvar backtrack func(start int, path []string)backtrack = func(start int, path []string) {if start == len(s) {res = append(res, strings.Join(path, " "))return}for i := start + 1; i <= len(s); i++ {if dict[s[start:i]] {path = append(path, s[start:i])backtrack(i, path)path = path[:len(path)-1]}}}backtrack(0, []string{})return res
}func ArrayToString(arr []string) string {res := "[\""for i := 0; i < len(arr); i++ {res += arr[i]if i != len(arr)-1 {res += "\",\""}}res += "\"]"if res == "[\"\"]" {res = "[]"}return res
}func main() {s := "catsanddog"wordDict := []string{"cat", "cats", "and", "sand", "dog"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))s = "pineapplepenapple"wordDict = []string{"apple", "pen", "applepen", "pine", "pineapple"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))s = "catsandog"wordDict = []string{"cats", "dog", "sand", "and", "cat"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))
}
代码2: 动态规划 + 回溯法
package mainimport ("fmt""strings"
)func wordBreak(s string, wordDict []string) []string {// 构建字典dict := make(map[string]bool)for _, word := range wordDict {dict[word] = true}// 动态规划n := len(s)dp := make([]bool, n+1)dp[0] = truefor i := 1; i <= n; i++ {for j := 0; j < i; j++ {if dp[j] && dict[s[j:i]] {dp[i] = truebreak}}}if !dp[n] {return []string{}}// 回溯函数var res []stringvar backtrack func(start int, path []string)backtrack = func(start int, path []string) {if start == len(s) {res = append(res, strings.Join(path, " "))return}for i := start + 1; i <= len(s); i++ {if dict[s[start:i]] {path = append(path, s[start:i])backtrack(i, path)path = path[:len(path)-1]}}}backtrack(0, []string{})return res
}func ArrayToString(arr []string) string {res := "[\""for i := 0; i < len(arr); i++ {res += arr[i]if i != len(arr)-1 {res += "\",\""}}res += "\"]"if res == "[\"\"]" {res = "[]"}return res
}func main() {s := "catsanddog"wordDict := []string{"cat", "cats", "and", "sand", "dog"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))s = "pineapplepenapple"wordDict = []string{"apple", "pen", "applepen", "pine", "pineapple"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))s = "catsandog"wordDict = []string{"cats", "dog", "sand", "and", "cat"}fmt.Println(ArrayToString(wordBreak(s, wordDict)))
}
代码3: 动态规划 + 记忆化搜索
func wordBreak(s string, wordDict []string) []string {// 构建字典dict := make(map[string]bool)for _, word := range wordDict {dict[word] = true}// 动态规划n := len(s)dp := make([]bool, n+1)dp[0] = truefor i := 1; i <= n; i++ {for j := 0; j < i; j++ {if dp[j] && dict[s[j:i]] {dp[i] = truebreak}}}if !dp[n] {return []string{}}// 记忆化搜索memo := make(map[int][][]string)var dfs func(start int) [][]stringdfs = func(start int) [][]string {if _, ok := memo[start]; ok {return memo[start]}var res [][]stringif start == len(s) {res = append(res, []string{})return res}for i := start + 1; i <= len(s); i++ {if dict[s[start:i]] {subRes := dfs(i)for _, subPath := range subRes {newPath := append([]string{s[start:i]}, subPath...)res = append(res, newPath)}}}memo[start] = resreturn res}return format(dfs(0))
}
// 格式化结果集
func format(paths [][]string) []string {var res []stringfor _, path := range paths {res = append(res, strings.Join(path, " "))}return res
}
输出:
["cat sand dog","cats and dog"]
["pine apple pen apple","pine applepen apple","pineapple pen apple"]
[]
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |
相关文章:

Golang每日一练(leetDay0047)
目录 138. 复制带随机指针的链表 Copy List with Random-pointer 🌟🌟 139. 单词拆分 Word Break 🌟🌟 140. 单词拆分 II Word Break II 🌟🌟🌟 🌟 每日一练刷题专栏 &…...

HCL Nomad Web 1.0.7发布和新功能验证
大家好,才是真的好。 要问在HCL Notes/Domino系列产品中,谁更新得最快,那么答案一定是HCL Nomad Web。 你看上图右边,从1.0.1更新到1.0.7,都没花多少时间。 从HCL Nomad Web 1.0.5版本开始,可以支持直接…...
春招网申简历填写三技巧
网申第一关很重要,不夸张的说网申决定了你的笔试机会,从如信银行考试中心了解到,银行网申筛选过程中,有机器筛选人工筛选两道程序,掌握填写技巧后对提升简历通过率有较大帮助,一定要把握住,关于…...

计算机网络基础知识总结
经过学习我们可以知道: 关于计算机网络: ip地址端口号协议协议分层TCP五层协议协议封装两台计算机之间的通信 目录 ip地址 端口号 协议 协议分层 五层协议体系结构 (1) 应用层 (2) 运输层 (3) 网络层 (4)数据链路层 (5)物理层 封装&分用 两台主机之间的通信 …...

(下)苹果有开源,但又怎样呢?
一开始,因为 MacOS X ,苹果与 FreeBSD 过往从密,不仅挖来 FreeBSD 创始人 Jordan Hubbard,更是在此基础上开源了 Darwin。但是,苹果并没有给予 Darwin 太多关注,作为苹果的首个开源项目,它算不上…...

row_number 和 cte 使用实例:考场监考安排
row_number 和 cte 使用实例:考场监考安排 考场监考安排使用 cte 模拟两个表的原始数据使用 master..spt_values 进行数据填充优先安排时长较长的考试使用 cte 安排第一个需要安排的科目统计老师已有的监考时长尝试使用 cte 递归,进行下一场考试安排&…...
2023天梯赛记录
文章目录 L2-001 紧急救援L2-002 链表去重L2-004 这是二叉搜索树吗?L2-005 集合相似度L2-006 树的遍历L2-007 家庭房产L2-010 排座位L2-011 玩转二叉树L2-012 关于堆的判断L2-013 红色警报L2-014 列车调度L2-016 愿天下有情人都是失散多年的兄妹L2-019 悄悄关注L2-0…...

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了
大家好,我是小富~ 前言 忙里偷闲学习了点技术写了点demo代码,打算提交到我那 2000Star 的Github仓库上,居然发现有5个Issues,最近的一条日期已经是2022/8/1了,以前我还真没留意过这些,我这人懒…...

OpenGL(三)——着色器
目录 一、前言 二、Shader 2 Shader 2.1 顶点着色器 2.2 片段着色器 三、APP 2 Shader 四、顶点颜色属性 五、着色器类C 一、前言 着色器Shader是运行在GPU上的小程序,为图形渲染管线的某个特定部分而运行。各阶段着色器之间无法通信,只有输入和输…...
【MySQL】单表查询
一、表的准备 查询操作的SQL演示将基于下面这四张表进行,我们先创建好这四张数据表,并为其添加数据。 1、第一张表为部门表,名称为包含三个字段:部门编号(deptno),部门名称(dname&…...

第一章 安装Unity
使用Unity开发游戏的话,首先要安装Unity Hub和Unity Editor两个软件。大家可以去官方地址下载:https://unity.cn/releases/full/2020 (这里我们选择的是2020版本) Unity Hub 是安装 Unity Editor、创建项目、管理帐户和许可证的主…...
20230425----重返学习-vue项目-vue自定义指令-vue-cli的配置
day-057-fifty-seven-20230425-vue项目-vue自定义指令-vue-cli的配置 vue项目 vuex版 普通版纯axios:切换页面,就会重新发送一次ajax请求普通版升级:vuex版vuex的常用功能 vuex 数据通信vuex 缓存数据 前进后退,切换页面&#…...

el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
使用el-input-number标签 也可以使用typenumbe和v-model.number属性,两者结合使用,能满足大多数需求,如果还不满足,可以再结合正则表达式过滤 <el-input v-model.number"value" type"number" /> el-i…...

Docker Compose的常用命令与docker-compose.yml脚本属性配置
Docker Compose的常用命令与配置 常见命令ps:列出所有运行容器logs:查看服务日志输出port:打印绑定的公共端口build:构建或者重新构建服务start:启动指定服务已存在的容器stop:停止已运行的服务的容器&…...
with语句和上下文管理器(py编程)
1. with语句的使用 基础班向文件中写入数据的示例代码: # 1、以写的方式打开文件f open("1.txt", "w")# 2、写入文件内容f.write("hello world")# 3、关闭文件f.close()代码说明: 文件使用完后必须关闭,因为文件对象会占用操作系统…...

《JavaEE初阶》HTTP协议和HTTPS
《JavaEE初阶》HTTP协议和HTTPS 文章目录 《JavaEE初阶》HTTP协议和HTTPSHTTP协议是应用层协议:使用Fiddler抓取HTTP请求和响应:Fiddler的下载和基本使用:Fiddler的中间代理人身份:其他抓包工具: 先简单认识HTTP请求与HTTP响应:HTTP请求:HTTP响应: HTTP请求详解:首行࿱…...

微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序
🎈🎈效果预览🎈🎈 ❤ 路劲规划 ❤ 功能总览 ❤ ChatGPT交互 一、需求背景 五一假期即即将到来,在大家都阳过之后,截止到目前这应该是最安全的一个假期。所以出去旅游想必是大多数人的选择。 然后&#x…...

Excel技能之实用技巧,高手私藏
今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…...
黑马程序员Java零基础视频教程笔记-运算符
文章目录 一、算数运算符详解和综合练习二、隐式转换和强制转换三、字符串和字符的加操作四、自增自减运算符五、赋值运算符和关系运算符六、四种逻辑运算符七、短路逻辑运算符八、三元运算符 一、算数运算符详解和综合练习 1. 运算符和表达式 ① 运算符:对字面量…...
Microsoft Data Loss Prevention(DLP)部署方案
目录 一、前言 二、部署流程 步骤一:确定数据需求 步骤二:规划信息保护策略...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...