秋招java笔试-诺瓦星云科技和老虎集团java笔试

西安诺瓦星云科技笔试

笔试偏c…
题型:1.操作系统 2.网络接口 3.数据结构 4.面向对象 5.编程改错
友元函数、二分法、虚函数
2道改错是c语言的程序改错


老虎集团

1.公交车
1000个站台,一辆公交的容量为c,问最少需要多少辆车
输入:

[ [ 2 , 1 , 4 ] , [ 4 , 2 , 6 ] ] , 5

[上车人数,站台号,下站的站台号],公交车容量
输出:

2

链接:https://www.nowcoder.com/discuss/471705?type=post&order=time&pos=&page=1&channel=666&source_id=search_post

public static int minCarCount (int[][] trips, int capacity) {
        // write code here
        //站台上车后,记录每个每个站台上车上的总人数
        int[] roads = new int[1001];
        int m = trips.length;
        for (int i = 0;i < m;i++)
        {
            for (int j = trips[i][1];j <= trips[i][2];j++)
            {
                roads[j] += trips[i][0];
            }

        }
        int count = 0;
        for (int i = 0;i < 1001;i++)
            count = Math.max(count, roads[i]);
        int res = count % capacity == 0 ? count/capacity : count/capacity + 1;
        return res;
    }

2.打怪升级
给定几个任务的数组,里面包含打怪需要的级数和通关后可以升的级数,求完成x个任务后,最大的级数。

输入:

2,1,[ [ 0 , 1 ] , [ 1 , 2 ] , [ 1 , 3 ]

需要完成x=2个任务,现在为1级,【【0级,升1级】,【1级,升2级】,【1级,升3级】】
输出:

6

1+2+3(本身的1级+第二个任务+第三个任务)

贪心----每次通关可升级最大的那个

public int maxLevel (int x, int level, int[][] tasks) {
	
	while(x>0){
		int max = 0;
		int maxid = 0;
		for(int i = 0;i < tasks.length;i++){
			if(level >= tasks[i][0] && max < tasks[i][1]){
				max = tasks[i][1];
				maxid = i;
			}
		}
		level += max;
		task[maxid][1] = 0;
		x--;
	}
	return level;
}

递归

public int maxLevel (int x, int level, int[][] tasks) {
        // write code here
        //在每个任务里面找到符合现在等级的最大等级提升
        int max=0;//记录最大升级数
        int maxid = 0;//记录最大升级数的id----以便通关后赋值为0,免得后面重复通关
        if (x==0){
            return level;
        }

        for (int i = 0; i < tasks.length; i++) {
            if (level>=tasks[i][0]&&max < tasks[i][1]){
                max=tasks[i][1];
                maxid = i;
            }
            tasks[maxid][1] = 0;
        }
        return maxLevel(x-1,level+max,tasks);

猜你喜欢

转载自blog.csdn.net/weixin_45773603/article/details/107903466
今日推荐