【无标题】

蓝桥杯-货物摆放

真的是一道看起来简单但是却很容易超时的问题,必须想办法降低时间复杂度。

优化思路:

遍历的时候减少遍历次数,那如何减少遍历次数呢,因为 L、W、H 的乘积是 n,那么 L、W、H 就是 n 的因数,n 余 L、W、H 都为0,所以 L、W、H 必定在 n 的因数中,当求出 n 所有的因数,再根据因数求方案就会快速很多。

求解 n 的因数也可以进行优化,因为 n%x=0,n/x=y,那么 n

%y=0,所以找到一个因数就相当于找到了两个因数,缩短了遍历遍数,但是这里要注意的是,对于一些 x*x = n 的特殊情况,只能找到一个因数。

import java.util.ArrayList;

public class Main {

    public static void main(String args[]) {
        long num = 2021041820210418l;

        ArrayList<Long> arr = new ArrayList<Long>();
        for(long i=1; i<=Math.sqrt(num); i++) {
            if(num%i==0) {
                arr.add(i);

                long um = num/i;

                if(um!=i) {
                    arr.add(um);
                }
            }
        }

        int count = 0;
        for(long i:arr) {
            for(long j:arr) {
                for(long k:arr) {
                    if(i*j*k==num) {
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值