LCP 18. 早餐组合

LeetCode: LCP 18. 早餐组合

在这里插入图片描述



将两个数组从小到大排序
然后一个数组从小到大遍历,一个数组从大到小遍历( j-- )。
当两个数组合符号条件时,那么从大到小的一方,j 到 0 之间的数都是符合条件的。( j - 0 + 1 )

提交代码


    public int breakfastNumber(int[] staple, int[] drinks, int x) {
    
    
        // 排序了
        Arrays.sort(staple);
        Arrays.sort(drinks);
        int lens = staple.length;
        int lend = drinks.length - 1;
        long ans = 0L;
        long count = 1000000007;

        for (int j = lend, i = 0; j >= 0 && i < lens; j--) {
    
    
            if (staple[i] + drinks[j] <= x) {
    
    
                ans = (ans + j + 1) % count;
                i++;
                j++;
            }
        }
        return (int) ans;
    }


    public static void main(String[] args) {
    
    
        int[] s = {
    
    2,1,1};
        int[] d = {
    
    8,9,5,1};
        int x = 9;
        Lcp18 l = new Lcp18();
        int i = l.breakfastNumber(s, d, x);
        System.out.println(i);

    }





暴力必然超时…

    public int breakfastNumber(int[] staple, int[] drinks, int x) {
    
    
        // 排序了
        Arrays.sort(staple);
        Arrays.sort(drinks);
        int lens = staple.length;
        int lend = drinks.length;
        long[] ans = new long[10];
        long count = 1000000007;
        int index = 0;

        for (int i = 0; i < lens; i++) {
    
    
            for (int j = 0; j < lend; j++) {
    
    
                if(x >= staple[i] + drinks[j]){
    
    
                    ans[index]++;
                    if(ans[index] + 1 > Long.MAX_VALUE ){
    
    
                        ans[index] %= count;
                        index++;
                    }
                }
            }
        }

        for (int i = index; i >= 1; i--) {
    
    
            ans[0] += ans[i];
        }

        return (int)ans[0];
    }

猜你喜欢

转载自blog.csdn.net/qq_43765535/article/details/108686693
18.
今日推荐