特殊数组的特征值
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必 是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
示例:
输入:nums = [3,5]
输出:2(有2个元素:3和5 ,大于或等于2)
class Solution {
public int specialArray(int[] nums) {
// 将数组进行排序
Arrays.sort(nums);
//Arrays.sort()是升序,进行降序排序
for(int i = 0, j = nums.length - 1; i < j; i++,j--){
int tamp = nums[i];
nums[i] = nums[j];
nums[j] = tamp;
}
// i为特征值,则有i个元素大于等于i
// 降序排序后,nums[i-1]>=i,且nums[i]<i
for(int i = 1; i <= nums.length; i++){
if((nums[i-1] >= i ) && (i == nums.length || nums[i] < i )){
return i;
}
}
return -1;
}
}

蓝桥杯真题--门牌制作
填空题:小蓝要为一条街的住户制作门牌号。这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
// 定义计数的count
int count = 0;
for(int i = 1; i <= 2020; i++){
// num替换i,防止发生死循环
int num = i;
while(num > 0){
//模10,检查位数上是否为2,是则count+1
if(num % 10 == 2){
count++;
}
// 位数-1,进入下一个循环
num /= 10;
}
}
System.out.println(count);
scan.close();
}
}
