一点资讯笔试 7.30
在主页点击编程题,等待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"}}))
} 
