leecode5291 统计位数为偶数的数字
给你一个整数数组 nums
,请你返回其中位数为 偶数 的数字的个数。
1 | 输入:nums = [12,345,2,6,7896] |
思路 1:c++,位数是除以 10,而判断是否偶数是对 2 取余判断是否为 0。
1 |
|
思路 2:Python,遍历 nums 里的数字。将数字转换为 string。判断 string 的长度对 2 取余是否为 0,是 0 则取 1,否则取 0(表示位数不是偶数)。再将是偶数的数字求和 sum。
1 | def findNumbers(nums: List[int]) -> int: |
leecode5292 划分数组为连续数字的集合
给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
如果可以,请返回 True;否则,返回 False。
1 | 实例1 |
思路 1:简单基本思路,将 nums 里的最小取出来,然后每次取 [min,min+k] 的值,不断从原 nums 里去除掉。如果可以这样去空原 nums 则返回 true,否则只要有值不在 nums 里,则返回 false。(但这个方法的时间复杂度太高 O(kn2))
1 | # -*- coding:utf-8 -*- |
进一步,用 hash 优化查找 x in nums。(c++ 中的 map 是平衡二叉树),排序时间复杂度 O(nlogn),
1 |
|
思路 3。新学习了 multiset。避免了 while 这一段找 min_index(见上),直接在 multiset 里查找并去掉,时间要短一点点,但空间用的要更多(因为 multiset 允许存储重复元素)
1 | bool isPossibleDivide2(vector<int>& nums, int k) { |
Reference
1, https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits
2, https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers
v1.5.2