Java 华为真题-黄金宝箱最大值

需求:

复制代码
   一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。
阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。
复制代码
输入描述
  第一行输入一个数字字串,数字之间使用逗号分隔,例如:2,10,-3,-8,40,5
  第二行输入咒语数字,例如:4,咒语数字大小小于宝箱的个数
复制代码
 输出描述
   最大值 

输入:

2,10,-3,-8,40,5 ->数字字符串

4 ->咒语数字大小

输出:

39

编码:

复制代码
public class AiLibaba{
    public static void main(String[] args) {
        //1.列表数据
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入一个数字字串:");
        String str = scanner.nextLine();
        //字符串数组
        String[] strNum = str.split(",");
        //集合对象
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < strNum.length; i++) {
            list.add(new Integer(strNum[i])); //添加到集合中
        }
        //2.求出最大值
        System.out.print("输入咒语数字:");
        int numK = scanner.nextInt();
        //调用方法
        int max = showMax(list, numK);
        System.out.println("最大值:" + max);
    }

    /**
     *
     * @param list 列表数据
     * @param numK  咒语数字
     * @return
     */
    private static int showMax(List<Integer> list, int numK) {
//        (1)定义两个指针,先求两个指针之间的和
        int left = 0;  //左边
        int right = numK - 1; //右边
        //累计和
        int sum = 0;
        for (int i = left; i <= right; i++) {
            sum += list.get(i); //累计
        }
        //最大值
        int max = sum;

//       (2) 两个指针右移,前面的和减掉移出去的(左侧),加上移入的(右侧)这样便得到下一个连续K区间的和。
        //右移
        while (right < list.size() - 1) {
            sum -= list.get(left++);
            sum += list.get(++right);
//        再用比较的方式,如果这个区间和比之前的大,那么就记录,否则继续右移
            if (sum > max)
                max = sum;
        }
        return max;
    }
}

效果:

相关推荐
少许极端8 小时前
算法奇妙屋(二十三)-完全背包问题(动态规划)
java·算法·动态规划·完全背包
a程序小傲8 小时前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
你不是我我8 小时前
【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理
java·开发语言
强子感冒了8 小时前
Java IO流学习笔记:从字节流到字符流
java·笔记·学习
期待のcode8 小时前
Java虚拟机堆
java·开发语言·jvm
callJJ8 小时前
WebSocket 两种实现方式对比与入门
java·python·websocket·网络协议·stomp
一条咸鱼_SaltyFish8 小时前
Spring Cloud Gateway鉴权空指针惊魂:HandlerMethod为null的深度排查
java·开发语言·人工智能·微服务·云原生·架构
i***13248 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
计算机徐师兄8 小时前
Java基于微信小程序的食堂线上预约点餐系统【附源码、文档说明】
java·微信小程序·食堂线上预约点餐系统小程序·食堂线上预约点餐微信小程序·java食堂线上预约点餐小程序·食堂线上预约点餐小程序·食堂线上预约点餐系统微信小程序
无心水9 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf