题解 | #牛牛的独特子数组#
牛牛的独特子数组
https://www.nowcoder.com/practice/d0622bdd537f48ef92af67c4a209d26c?tpId=363&tqId=10622356&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param k int整型 * @return int整型 */ public int minSumOfUniqueSubarrays (int[] nums, int k) { int [] calNumber = new int[100001]; for (int i = 0; i < nums.length; i++) { calNumber[nums[i]]++; } int sum = 0; for (int i = 0; i < calNumber.length; i++) { if (calNumber[i] > 0 && k > 0) { sum += i; k--; } } return k == 0 ? sum : 0; } }
本题知识点分析:
1.计数排序
2.数组遍历
3.数学模拟
本题解题思路分析:
1.因为题目要求的数值范围在1到10W之间,这个级别常量级
2.可以直接用计数排序去统计出现的数值和次数
3.然后如果当前次数大于0并且k>0那么加上该数字i,k--
4.因为有可能出现{4,4,4} k = 3这样的情况,不能用重复值, 而k=3,代入代码,k = 2 ,只做一次减法,
5.return 的时候判断k是否等于0即可,如果等于0,说明找到符合要求的,如果k不等于0,说明找不到,返回0即可
本题使用编程语言: Java
我看很多人用滑动窗口做,都是可以的,都是O(n)的时间复杂度。如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~