LeetCode算法题-Range Addition II(Java实现)

这是悦乐书的第271次更新,第285篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第138题(顺位题号是598)。给定一个m行n列的新二维数组M,其初始值为0。提供一个二维数组ops,每次对M做如下操作,每次从ops中取出一个数组temp,temp里面包含两个整数a和b,使得M[i][j]的元素都自增1,其中0 <= i < a, 0 <= j < b。在遍历完ops中的所有数组后,找出M中值最大的元素的个数。例如:

输入: m = 3, n = 3,ops = [[2,2],[3,3]]

输出: 4

说明: 初始化二维数组M = [[0, 0, 0],[0, 0, 0],[0, 0, 0]],然后取ops中的第一个数组[2,2],也就是0<=i<2,0<=j<2,所以M[0][0],M[0][1],M[1][0],M[1][1]都自加1,此时M=[[1, 1, 0],[1, 1, 0],[0, 0, 0]]。然后取ops中的第二个数组[3,3],表明0<=i<3,0<=j<3,分别对M中的元素加1,此次操作是对数组中所有元素都加1,因为M的下标最大到2,此时M = [[2, 2, 1],[2, 2, 1],[1, 1, 1]],其中2是最大值,出现了4次,所以返回4。

注意:

  • m和n的范围是[1,40000]。

  • a的范围是[1,m],b的范围是[1,n]。

  • ops的范围不超过10,000。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

通过观察上面的例子,我们可以知道,被加的次数最多的元素值最大,其次数就是坐标范围之积,就是题目要求的M中值最大的元素的个数。例题中,被加次数最多坐标范围是[2,2],这中间有4个数。我们只需要找到每次操作的坐标最小值,就可以锁定操作的最小范围,此范围内的值最大,因为每次都会把该范围内的数加1。题目已经告诉了M的行是m,列是n,而每次操作的坐标的ops中数组的前两位元素,取两者之间的最小行值、列值,最后相乘就是最大值的个数。特殊情况就是,给的ops为null或者是个空数组,那么值最大的元素值为0,次数就是M的行列之积。

public int maxCount(int m, int n, int[][] ops) {
    if (ops == null || ops.length == 0) {
        return m*n;
    }
    for (int[] temp : ops) {
        m = Math.min(m, temp[0]);
        n = Math.min(n, temp[1]);
    }
    return m*n;
}


03 小结

算法专题目前已日更超过四个月,算法题文章138+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 该文章为转载文章,作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,从事过搜索和推荐相关工作。 T...
    名字真的不重要阅读 5,616评论 0赞 3
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,195评论 0赞 2
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,372评论 0赞 18
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 5,162评论 0赞 0
  • #解决问题 思考框架,工具是一方面。绝不放弃,坚持到底的精神是更重要的另一方面。 这几天同事们休假,我一人做整个公...
    果大喵喵阅读 256评论 0赞 0

友情链接更多精彩内容