一点资讯笔试 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))
}


2. 最小路径和

一个二维数组,从左上角到右下角,最少和是多少数

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}}))
}

3. 版本号比较

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"}}))
}




#一点资讯笔试讨论##一点资讯##笔经#
全部评论
第一题我记得可以用贪心做,但忘了咋做,最后套dp做的
1 回复
分享
发布于 2021-07-30 20:21
题型是4单选,6不定项,3编程 单选4*3,不定项6*3(选错不得分,部分对得1/3分) 编程分数 20 20 30
点赞 回复
分享
发布于 2021-07-30 19:49
百信银行
校招火热招聘中
官网直投
感觉第一题比后两题难😅
点赞 回复
分享
发布于 2021-07-30 19:55
我第一题是贪心做的,和DFS没啥关联
点赞 回复
分享
发布于 2021-07-30 20:09
第一题比后两道题难一些,第一题我单调栈剪枝+dp,复杂度感觉有点高
点赞 回复
分享
发布于 2021-07-30 20:15
一个小时AK
点赞 回复
分享
发布于 2021-07-30 20:23
3道编程题 全A
点赞 回复
分享
发布于 2021-07-30 20:33
我寻思直接暴力比较不香么
点赞 回复
分享
发布于 2021-07-30 20:37
第一题,就是按结束时间排序,然后遍历比较一下,取最大的结束大于后一个结束的时间数量?
点赞 回复
分享
发布于 2021-07-30 20:45
java写起来可真麻烦,还好最后还是全A了
点赞 回复
分享
发布于 2021-07-30 20:48
第一题就贪心
点赞 回复
分享
发布于 2021-07-30 20:50
第一题优先队列,秒了呀
点赞 回复
分享
发布于 2021-07-31 14:07

相关推荐

2 6 评论
分享
牛客网
牛客企业服务