Java算法之 n个整数中找出连续m个数加和是最大

2023-10-27

分析:
m个连续的整数加和是最大,那么最简单的实现方式就是:从下标为0查找m个元素,依次n个数组成的容器进行遍历,每次遍历判断当前最大的m个数之和,遍历结束后返回。

public class MaxArray {  
    public static void main(String[] args) {  
        // int[] 数组 asList返回 int[];形式List对象   
        Integer[] paras = { 133, 445, 6768, 23, 656, 123105, 768, 234,  
                787, 6321, 5677, 234, 1445, 3551, 547, 3245, 12357 };  
        //引用类型的数组转化为集合  
        List<Integer> lists = Arrays.asList(paras);  
        int n = 6;  
          
        //将集合转化为数组  
        System.out.println(getArray((Integer[])lists.toArray(),n));  
        System.out.println(getArray(paras, n));  
    }  
  
    public static <T> String getArray(Integer[] params, int n) {  
        // 声明maxs,初始化temp  
        Integer[] maxs = null, temp = null;  
        if (!(params instanceof Integer[])) {  
            return "参数类型错误";  
        }  
        temp = new Integer[n];  
        maxs = new Integer[n];  
        int len = params.length;  
        for (int i = 0; i < len; i++) {  
            if (i + n <= len) {  
                // 数组复制 相当于切片  
                System.arraycopy(params, i, temp, 0, n);  
                if (maxs[0] == null  
                        || (maxs[0] != null && (getSum(maxs) < getSum(temp)))) {  
                    // 引用相同 不可使用 maxs = temp;  
                    // 从temp复制一份给maxs  
                    System.arraycopy(temp, 0, maxs, 0, n);  
                }  
            }  
        }  
        // 将数组以字符打印  
        return Arrays.toString(maxs);  
    }  
    //取数组或者集合的加和  
    public static <T> int getSum(T t) {  
          
        int sum = 0;  
        if (t instanceof List<?>) {  
            List<?> temp = (List<?>) t;  
            int len = temp.size();  
            for (int i = 0; i < len; i++) {  
                sum += (Integer)temp.get(i);  
            }  
        } else if (t instanceof Integer[]) {  
            Integer[] temp = (Integer[]) t;  
            for (int i = 0; i < temp.length; i++) {  
                sum += temp[i];  
            }  
        }  
        return sum;  
    }  
  
}  

如代码所示,Java底层数据结构多由数组实现的,并且在System库中提供了数组复制的本地方法arraycopy,可以轻松的将改变属性的引用。使用Arrys.asList()方法和list.toArray()可以轻松的实现数组到集合之间的相互切换。

转载于:https://my.oschina.net/90888/blog/1649300

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java算法之 n个整数中找出连续m个数加和是最大 的相关文章

随机推荐

  • Linux虚拟机CentOS永久修改分辨率的方法

    Linux虚拟机CentOS永久修改分辨率的方法 写在前面 1修改command的分辨率 2修改GUI的分辨率 写在前面 CentOS等Linux系统分为两大部分 底层的command模式 就是命令行模式 和GUI 图形化界面 两者各有其独
  • 快手极速版脚本代码(仅供参考)

    home sleep 1500 while click 快手极速版 sleep 5000 等待5s var num 200 想要循环几次 自己输入 nextVideo 1 num 下一个视频 function nextVideo i num
  • 百度离线SDK的调用(Linux+win)

    这两天弄了一下百度离线SDK的识别调用 分享一下心得 1 百度离线SDK的识别 获取条件 企业账号 使用认证后的企业帐号创建项目申请免费激活码 一台设备一个激活码 如果是一台电脑有双系统的话 亲测 同一个激活码并不好使 会报错 提示你激活码
  • 数据结构与算法总结

    文章目录 线性数据结构 1 数组 2 链表 2 1 链表简介 2 2 链表分类 2 2 1 单链表 2 2 2 循环链表 2 2 3 双向链表 2 2 4 双向循环链表 2 3 应用场景 2 4 数组 vs 链表 3 栈 3 1 栈简介 3
  • redis基础6——缓存穿透、缓存击穿、缓存雪崩

    文章目录 一 缓存穿透 双库为空 1 1 基础概念 1 2 解决办法 1 2 1 业务层校验 1 2 2 设置key过期时间 1 2 3 布隆过滤器 1 2 3 1 原理 1 2 3 1 1 哈希函数使用 1 2 3 1 2 布隆过滤器数据
  • JVM运行原理

    JAVA和JVM运行原理揭秘 JVM是java的核心和基础 在java编译器和os平台之间的虚拟处理器 它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台 可以在上面执行java的字节码程序 AD 这里和大家简单分享一下JA
  • 机器学习之特征工程

    机器学习之特征工程 1 特征工程介绍 1 1 为什么需要特征工程 1 2 什么是特征工程 1 3 特征工程内容 2 特征提取 2 1 字典特征提取 2 2 文本特征提取 2 3 Tf idf文本特征提取 3 特征预处理 3 1 什么是特征预
  • springboot +mybatis遇到的(no found)找不到或者找到不匹配mapper的问题

    1 在springboot里面进行junit单元测试的时候 一直提示org apache ibatis binding BindingException Invalid bound statement not found 这样的错误 苦寻答
  • 【C++图解专栏】手撕数据结构与算法,探寻算法的魅力

    个人博客 https blog csdn net Newin2020 spm 1011 2415 3001 5343 专栏定位 为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解 也欢迎大佬们一起交流 专栏简介 在这个专栏 我将带着大家
  • npm yarn pnpm 包管理器区别

    npm yarn和pnpm都是JavaScript的包管理工具 它们的主要区别如下 性能 在处理依赖安装时 yarn和pnpm相对于npm会更快 因为它们支持并行安装 但是在其他方面 如缓存等 各自的性能表现可能有所不同 安全性 yarn和
  • 关于Linux内核编译

    关于生成配置文件 1 首先执行以下命令从老的 xxxx defconfig 文件生成临时使用的 config 文件 根据硬件平台生成临时配置文件 config 比如 make xxxx defconfig make vexpress def
  • MacOS下终端可以连接mysql但是MySQLWorkbench无法连接

    亲测有效 很早前安装了mysql 一直在终端里使用 最近安装了MySQLWorkbench但始终无法连接 整个人都给晕了 但是在MySQLWorkbench的连接界面下始终无法连接成功 在终端测试同样的ip和端口是可以连接成功的 mysql
  • 一网打尽时钟树综合Clock Skew

    一网打尽时钟树综合Clock Skew 文章右侧广告为官方硬广告 与吾爱IC社区无关 用户勿点 点击进去后出现任何损失与社区无关 时间过得很快 今天又上班了 最重要的是公众号还得对得起各位粉丝一直以来的支持 所以必须抽时间码字更文 在五一期
  • C++ 自定义QPushButton有参信号

    C 自定义QPushButton有参信号 ifndef MYWINDOW H define MYWINDOW H include
  • 【无奈】Invalid byte 1 of 1-byte UTF-8 sequence解决方案

    今天在eclipse中编写pom xml文件时 注释中的中文被eclipse识别到错误 Invalid byte 1 of 1 byte UTF 8 sequence 曾多次遇到该问题 问题的根源是 The cause of this is
  • Vue路由hash模式下锚点滚动实现

    1 Vue路由在hash模式下 已被占用 无法使用浏览器的锚点功能 使用js实现锚点滚动功能 使用js实现锚点滚动功能 字符串需要是 id 锚点格式 数字的话标识要滚动的位置 param String Number selector exp
  • qt中自定义关闭按钮的时候绑定关闭事件

    qt中自定义了关闭按钮 如何简单的只用绑定信号跟槽就直接调用事件呢 1 首先在界面中放置一个按钮 重命名为CloseBtn 然后接下来就只需要在构造函数中加上如下的这句 connect ui gt CloseBtn SIGNAL click
  • DFS时,出现内存超限 Memory Limit Exceeded

    DFS时 出现内存超限 Memory Limit Exceeded 很大可能由于dfs死循环 比如 vis 数组一定优先赋值再dfs
  • 最小二乘曲线拟合——C语言算法实现一

    最小二乘曲线拟合 给定一组数据 我们要对这组数据进行曲线拟合 假定要拟合的曲线方程为 y a0 a1 x 1 a2 x 2 a3 x 3 an x n x y 0 995119 7 620000 2 001185 2 460000 2 99
  • Java算法之 n个整数中找出连续m个数加和是最大

    为什么80 的码农都做不了架构师 gt gt gt 分析 m个连续的整数加和是最大 那么最简单的实现方式就是 从下标为0查找m个元素 依次n个数组成的容器进行遍历 每次遍历判断当前最大的m个数之和 遍历结束后返回 public class