【精】领扣LintCode算法问题答案:1523. 分区数组

    科技2022-07-13  139

    1523. 分区数组

    描述

    给定一个数字数组,您需要检查是否可以将该数组划分为每个长度为k的子序列,例如:

    数组中的每个元素仅在一个子序列中出现子序列中的所有数字都是不同的数组中具有相同值的元素必须位于不同的子序列中

    是否可以对满足以上条件的数组进行分区? 如果可能,返回true,否则返回false

    样例 1:

    输入: A:[1, 2, 3, 4] k = 2 输出: true 解释: 那么一种可能的方法是选择数组{1,2}的前2个元素作为第一个子序列,接下来的2个元素{3,4}作为下一个子序列。所以答案是正确的

    样例 2:

    输入: A: [1, 2, 2, 3] k: 3 输出: false 解释: 没有办法将数组划分为多个子序列,以使所有子序列的长度均为3,并且数组中的每个元素都恰好在一个子序列中出现,因此答案为假。

    原题传送门


    文章目录

    1523. 分区数组描述样例 1:样例 2: 题解最后说两句声明


    题解

    public class Solution { /** * @param A: Integer array * @param k: a integer * @return: return is possible to partition the array satisfying the above conditions */ public boolean PartitioningArray(int[] A, int k) { // write your code here // 每个长度都是k,所以取余应该为0 if (A.length % k != 0) { return false; } // 每个长度为k就能分成maxCount组 int maxCount = A.length / k; Map<Integer, Integer> counter = new HashMap<>(); for (int n : A) { Integer count = counter.getOrDefault(n, 0); ++count; // 子序列中的所有数字都是不同的,数组中具有相同值的元素必须位于不同的子序列中 // 每组不能有重复,所以数量一定不能大于组数 if (count > maxCount) { return false; } counter.put(n, count); } return true; } }

    最后说两句

    非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

    作者水平有限,如果文章内容有不准确的地方,请指正。

    希望小伙伴们都能每天进步一点点。

    声明

    本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

    Processed: 0.012, SQL: 8