4月10滴滴的笔经

1、计算操作系统的调度算法时间。给你n行数字,每行两个数字,第一个表示当前任务的等待时间,第二个是任务执行的时间。让你计算程序执行的最短时间。

其实是一个贪心算法。直接对输入的数组进行排序(按照等待时间的短进行排序,然后如果等待时间相等的时候,我们就比较执行时间的长度)。然后再扫描一次数组就行了。
n=2
5 1
2 4
输出结果:7 (先执行任务2,最后的时间是6,但是这个时候任务1又可以执行了,然后直接执行,6+1=7)

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Node[] a = new Node[n];
        for(int i = 0 ;i<n;i++){
            a[i] = new Node();
            a[i].waittime = sc.nextLong();
            a[i].dotime = sc.nextInt();
        }
        Arrays.sort(a,(A,B)->{
            if(A.waittime<B.waittime){
                return -1;
            }else if(A.waittime==B.waittime){
                if(A.dotime<B.dotime){
                    return -1;
                }
            }else if(A.waittime>B.waittime){
                return 1;
            }
            return 0;
        });
        long time=0;
        long cutterntime = a[0].waittime;
        for(int i = 0;i<n;i++){
            if(cutterntime<a[i].waittime){
                cutterntime = a[i].waittime;
            }
            time = cutterntime+a[i].dotime;
            cutterntime = cutterntime+a[i].dotime;
        }
        System.out.println(time);
    }
    static class Node{
        public long waittime;
        public long dotime;

        public Node() {

        }

        @Override
        public String toString() {
            return "Node{" +
                    "waittime=" + waittime +
                    ", dotime=" + dotime +
                    '}';
        }
    }
}

2、种树问题,给你两个数,一个n表示要种的数数量,另一个数x是树之间的差值,然后再给出n棵树的高度,你要使用魔法,将这些树变成等差数列。前提是要使用的魔法次数最少。比如

5 2
1 3 1 3 5
结果为3(改变最后三棵树就行了)
这里有一个问题,x有可能是负数,并且树的高度不能小于1。

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args){
        Scanner sc  = new Scanner(System.in);
        int n = sc.nextInt();
        int x = sc.nextInt();
        long[] a = new long[n];
        for(int i = 0 ;i<n;i++){
            a[i] = sc.nextLong();
        }
        //寻找最长连续等差数列。
        int[] dp = new int[n];
        for(int i = 0 ;i<n;i++){
            dp[i] = 1;
        }
        for(int i =1;i<n;i++){
            if(a[i]-a[i-1]==x){
                dp[i] = dp[i-1]+1;
            }
        }
        //如果开始的下标不一定相等的话就要进行一定的处理。
        //以谁结尾的开头是什么,然后进行相应的判断就行了
        int count = Integer.MAX_VALUE;
        if(x>0) {    //差值为正数的时候
            for (int i = 0; i < n; i++) {
                if (a[i] - (((i + 1) - dp[i]) * x) >= 1 + (i + 1 - dp[i]) * x) {
                    count = Math.min(n - dp[i], count);
                }
            }
        }
        else{     //差值为负数的时候
            for(int i= 0 ;i<n;i++ ){
                if(a[i]>=(1+((-x)*(n-i-1)))){    //
                    count = Math.min(n-dp[i],count);
                }
            }
        }
        if(count==Integer.MAX_VALUE){
            System.out.println(0);
        }else {
            System.out.println(count);
        }
    }
}
//后面这个不知道对不对的。
全部评论

相关推荐

03-19 10:36
云南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11652次浏览 100人参与
# 你的实习产出是真实的还是包装的? #
2039次浏览 43人参与
# 巨人网络春招 #
11393次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7718次浏览 43人参与
# 简历第一个项目做什么 #
31813次浏览 344人参与
# 重来一次,我还会选择这个专业吗 #
433645次浏览 3926人参与
# 米连集团26产品管培生项目 #
6166次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187289次浏览 1122人参与
# 牛客AI文生图 #
21463次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152540次浏览 888人参与
# 研究所笔面经互助 #
118986次浏览 577人参与
# 简历中的项目经历要怎么写? #
310519次浏览 4227人参与
# AI时代,哪些岗位最容易被淘汰 #
64028次浏览 837人参与
# 面试紧张时你会有什么表现? #
30528次浏览 188人参与
# 你今年的平均薪资是多少? #
213232次浏览 1039人参与
# 你怎么看待AI面试 #
180298次浏览 1266人参与
# 高学历就一定能找到好工作吗? #
64348次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76633次浏览 374人参与
# 我的求职精神状态 #
448229次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363673次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160718次浏览 1112人参与
# 校招笔试 #
471566次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务