题目:
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。
示例:
输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数)
345 是 3 位数字(位数为奇数)
2 是 1 位数字(位数为奇数)
6 是 1 位数字 位数为奇数)
7896 是 4 位数字(位数为偶数)
因此只有 12 和 7896 是位数为偶数的数字
- 1 <= nums.length <= 500
- 1 <= nums[i] <= 10^5
解题方法:
这是我刷的第50道题了,虽然没有写那么多博客,不太好意思把所有的题都写出来,目前刷的都是简单题,有些没有什么价值。恭喜自己吧,以后会刷的更多,继续坚持!
言归正传,这道题我一看到就觉得很简单,不过我想做的好一点,所以就用手上的信息来优化计算过程:
- 数值的范围是确定的,且不是很大。
- 偶数位数的数字可以确定数字范围。
所以只要判断数组中的数字是否在这些范围内就可以了。
代码和结果:
class Solution {
public:
int findNumbers(vector<int>& nums) {
int cnt=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]/10>=1&&nums[i]/100<1)
cnt++;
else if(nums[i]/1000>=1&&nums[i]/10000<1)
cnt++;
else if(nums[i]==100000)
cnt++;
}
return cnt;
}
};
运行结果:

很明显,结果并不好,内存消耗太大了。看了一下题解,大佬们把数字转成字符串,然后判断字符串长度,真的是一个好想法,我怎么没想到!
新的代码:
class Solution {
public:
int findNumbers(vector<int>& nums) {
int cnt=0;
for(int i=0;i<nums.size();i++)
{
if(to_string(nums[i]).size()%2==0)
cnt++;
}
return cnt;
}
};
运行结果:

哎,结果也并不怎么好,但是他的优点是适用性更广,行啦,今天就到这了。
原题链接:https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits/
网友评论