力扣每日一题——3184.构成整天的下标对数目Ⅰ

力扣每日一题——3184.构成整天的下标对数目Ⅰ

**题目描述:**给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < jhours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。

整天 定义为时间持续时间是 24 小时的 整数倍

例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。

示例 1:

输入: hours = [12,12,30,24,24]

输出: 2

解释:

构成整天的下标对分别是 (0, 1)(3, 4)

示例 2:

输入: hours = [72,48,24,3]

输出: 3

解释:

构成整天的下标对分别是 (0, 1)(0, 2)(1, 2)

提示:

  • 1 <= hours.length <= 100
  • 1 <= hours[i] <= 109

**解法一:**暴力双重for循环

public int countCompleteDayPairs(int[] hours) {
        //count计数
        int count = 0;
        for (int i = 0; i < hours.length -1; i++) {
            for (int j = i+1; j < hours.length; j++) {
                if ((hours[i]+hours[j])%24 == 0){
                    count++;
                }
            }
        }
       return  count;
    }

解法二:计数数组+排列组合

//分情况讨论 建立count数组 数学排列组合知识
    public int countCompleteDayPairs(int[] hours) {
        //按小时计数,一天也就24个小时,将每中小时出现的次数存放到count数组中
        int[] count = new int[24];
        for (int hour : hours) {
            //对hours中每个元素取模,得到24以内的数,存放到count数组中
            count[hour%24]++;
        }
        int result =0;
        //相当于求count中两个数加起来等于24的个数
        //但是要注意,0和12需要分开讨论。相当于从count[0]个数组选出两个两两组合。count[12]同理
        result  += count[0]*(count[0]-1)/2;
        result  += count[12]*(count[12]-1)/2;
        //求两两相加为24的组合数
        for (int i = 0; i < 12; i++) {
            result += count[i] * count[24 - i];
        }
        return  result;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值