在主页点击编程题,等待5秒读条的时候,我点开了goland,然后给我记了一次跳出。。丫的
这次笔试总体比较简单
核心代码模式
1.
有n个活动,活动时间为"10:00"-"11:00"这种类型,问最多能参与多少个活动
活动参与不可提前退出,"11:00"结束可以去参加"11:00"的新活动
输入:
times := [][]string{[]string{"10:00","12:00"},[]string{"03:00","11:30"},[]string{"11:30","14:00"}}
(结束时间和起始时间都是字符串,一对时间是一个字符串数组,总共是一个字符串数组)
dfs判断即可
package main import ( "fmt" "sort" ) /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param timeSchedule string字符串二维数组 * @return int整型 */ type tim struct { begin,end string } func countMaxActivity( timeSchedule [][]string ) int { // write code here t := make([]tim,len(timeSchedule)) for i,j:= range timeSchedule{ t[i].begin,t[i].end= j[0],j[1] } sort.Slice(t, func(i, j int) bool { if t[i].begin==t[j].begin{ return t[i].end<t[j].end } return t[i].begin < t[j].begin }) ans := 0 var dfs func(index int,endtime string,temp int) dfs = func(index int,endtime string,temp int) { if index == len(t){ ans = max(ans,temp) return } if endtime<=t[index].begin{ dfs(index+1,maxStr(endtime,t[index].end),temp+1) } dfs(index+1,endtime,temp) } dfs(0,"",0) return ans } func maxStr(a,b string)string{ if a>b{ return a } return b } func max(a,b int)int{ if a>b{ return a } return b } func main(){ times := [][]string{[]string{"10:00","12:00"},[]string{"03:00","11:30"},[]string{"11:30","14:00"}} fmt.Println(countMaxActivity(times)) }
一个二维数组,从左上角到右下角,最少和是多少数
dp规划即可
package main import "fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mapArray int整型二维数组 * @return int整型 */ func findMin( mapArray [][]int ) int { if len(mapArray)==0 || len(mapArray[0])==0{ return 0 } dp :=make([][]int,len(mapArray)) for i:=range dp{ dp[i] = make([]int,len(mapArray[0])) } dp[0][0]=mapArray[0][0] for i:=1;i<len(mapArray);i++{ dp[i][0] = dp[i-1][0]+ mapArray[i][0] } for i:=1;i<len(mapArray[0]);i++{ dp[0][i] = dp[0][i-1]+ mapArray[0][i] } for i:=1;i<len(mapArray);i++{ for j:=1;j<len(mapArray[0]);j++{ dp[i][j] = min(dp[i-1][j],dp[i][j-1])+mapArray[i][j] } } return dp[len(mapArray)-1][len(mapArray[0])-1] } func min(a,b int)int{ if a<b{ return a } return b } func main(){ fmt.Println(findMin([][]int{[]int{1,3,1},[]int{1,5,1},[]int{4,2,1}})) }
n对字符串数组
每对字符串数组有两个版本(字符串),"0.0.1","1.0",如果前面的版本>=后面的版本,对应的结果是1,否则是2
题目中说了,每一位的数字小于1000
所以我们就给他补到同长(因为"0.0.1"<"1.0"),然后做数字判断即可
package main import ( "fmt" "strconv" "strings" ) /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param version_list string字符串二维数组 输入参数为版本号列表,其中每个元素包含两个版本号 * @return int整型一维数组 */ func max_version( version_list [][]string ) []int { ans := make([]int,0) for _,j:=range version_list{ k := strings.Split(j[0],".") v := strings.Split(j[1],".") for len(k)<4{ k = append(k, "0") } for len(v)<4{ v = append(v, "0") } ka , va:=0,0 for _,j:=range k{ temp,_ := strconv.Atoi(j) ka = ka*1000 + temp } for _,j:=range v{ temp,_ := strconv.Atoi(j) va = va*1000 + temp } if ka>=va{ ans = append(ans, 1) }else{ ans = append(ans, 2) } } return ans } func main(){ fmt.Println(max_version([][]string{[]string{"0.1.0","1.0"},[]string{"2.1.13","1.20.0"},[]string{"2.1.0","2.1.0"}})) }
全部评论
(12) 回帖