zoukankan      html  css  js  c++  java
  • 今日总结

    今天参加了LeetCode的力扣杯春季编程大赛,下面是我第一题的题解
    小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。

    注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/4xy4Wx
    示例 1:

    输入:nums = [2,5,3,5], target = 6
    输出:1
    解释:预算内仅能购买 nums[0] 与 nums[2]。
    示例 2:
    输入:nums = [2,2,1,9], target = 10
    输出:4
    解释:符合预算的采购方案如下:
    nums[0] + nums[1] = 4
    nums[0] + nums[2] = 3
    nums[1] + nums[2] = 3
    nums[2] + nums[3] = 10

    提示:

    • 2 <= nums.length <= 10^5
    • 1 <= nums[i], target <= 10^5

    解题思路
    java双指针的思想实现,单向处理会超时
    先利用Arrays.sort方法对数组进行排序,然后先将数组中大于target的值排除出去,缩短数组长度。
    然后以左边为基准移动右边,直到能满足target,计算出两者之间的距离,移动左边,再移动右边继续计算,直到两个指针相遇,循环结束,只遍历了一次
    代码

    import java.util.Arrays;
    class Solution {
        public int purchasePlans(int[] nums, int target) {
            Arrays.sort(nums);
            int len = nums.length;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i]>=target){
                    len = i;
                    break;
                }
            }
            int count = 0;
            if (len>=2){
                int arr1 = 0;
                int arr2 = len-1;
    
                while(arr1!=arr2){
                    if (nums[arr1]+nums[arr2]>target){
                        arr2--;
                    }else {
                        count = (count + arr2 - arr1)%(1000000007);
                        arr1++;
                    }
                }
            }
            return count;
        }
    }
    
  • 相关阅读:
    adb pull / push
    June 25,2014---->Binder(IPC),Dalvik ,DEX/ODEX
    adb 读写模式 挂载文件系统
    INSTALL_FAILED_UID_CHANGED
    Logcat不显示Application的解决办法
    Android终端管理器删除文件夹
    ADB
    StringBuffer
    扑克牌排序
    windows内存管理方式以及优缺点
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/14619817.html
Copyright © 2011-2022 走看看