2024年9月7日京东笔试第五批记录

2024年9月7日京东笔试第五批记录

1.忘了

思路:反正是贪心算法,找左边的最大,右边的最小,相减即为答案。
AC

2.牛牛障碍赛跑

思路:使用贪心算法,每次碰到障碍就判断,1.如果在障碍位置跳跃,跳跃b个位置后,(1)没有越过终点,则跳跃;(2)越过终点,就有问题,选择下一个方法。2.如果不在障碍位置跳跃,在上一个障碍位置和下一个障碍位置之间跳跃,(1)没有越过终点,则跳跃;(2)越过终点,就有问题,选择上一个方法。
代码:没有了,也没意义,应该用dp做的,但是没有思路。
0.25

3.牛牛减数

题目:输入n k sum,n个ai=i的队列,求减几次使得任意k个元素和不大于sum。
思路:求s=sum/k,m=sum%k,可以将sum拆分为最平均分布的k个值,m个(s+1),k-m个s,将队列的所有值按照这平均分布的k个值对齐,即保证最多有m个(s+1),其他的都要小于s。特殊情况,1.队列的最后k个元素和小于sum,直接返回0。2.k>n,那么表示队列取k个元素变为队列取n个元素,即k=n。

public class jingdong_3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别

        int t = in.nextInt();
        while (t-- > 0) { // 注意 while 处理多个 case
            long n = in.nextLong();
            long k = in.nextLong();
            long sum = in.nextLong();
            long curSum = 0;
            for(long i = n; i >=n-k+1; i--)
            {
                curSum += i;
            }
            if(curSum <= sum)
            {
                System.out.println(0);
                continue;
            }
            if(k > n) k = n;
            long s = sum / k;
            long m = sum % k;
            long res = 0;
            for(long i = n; i >= 1; i--)
            {
                if(i > n-m)
                {
                    if(i-(s+1) >= 0)
                        res += i-(s+1);
                }else{
                    if(i-s >= 0)
                        res += i-s;
                }
            }
            System.out.println(res);
        }
    }
}

吐槽:差一点就AC,就差个k>n的判断,如果k>n,则k=n。
0.33

结论:死脑筋了,最后一题应该多写点特殊情况,第二题后面知道动态规划但是不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值