2023/3/14算法练习

特殊数组的特征值

给你一个非负整数数组 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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值