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(kn^2)$)
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