首页 > 其他分享 >统计和小于目标的下标对数目

统计和小于目标的下标对数目

时间:2023-08-23 11:44:29浏览次数:45  
标签:小于 下标 target nums int index 数目 public

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < n 且 nums[i] + nums[j] < target 的下标对 (i, j) 的数目。

示例 1:

输入:nums = [-1,1,2,3,1], target = 2
输出:3
解释:总共有 3 个下标对满足题目描述:

  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = 0 < target
  • (0, 2) ,0 < 2 且 nums[0] + nums[2] = 1 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = 0 < target
    注意 (0, 3) 不计入答案因为 nums[0] + nums[3] 不是严格小于 target 。
    示例 2:

输入:nums = [-6,2,5,-2,-7,-1,3], target = -2
输出:10
解释:总共有 10 个下标对满足题目描述:

  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = -4 < target
  • (0, 3) ,0 < 3 且 nums[0] + nums[3] = -8 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = -13 < target
  • (0, 5) ,0 < 5 且 nums[0] + nums[5] = -7 < target
  • (0, 6) ,0 < 6 且 nums[0] + nums[6] = -3 < target
  • (1, 4) ,1 < 4 且 nums[1] + nums[4] = -5 < target
  • (3, 4) ,3 < 4 且 nums[3] + nums[4] = -9 < target
  • (3, 5) ,3 < 5 且 nums[3] + nums[5] = -3 < target
  • (4, 5) ,4 < 5 且 nums[4] + nums[5] = -8 < target
  • (4, 6) ,4 < 6 且 nums[4] + nums[6] = -4 < target

暴力无脑方式

class Solution {
    public int countPairs(List<Integer> nums, int target) {
        int count = 0;
        for(int i=0;i<nums.size();i++){
            for(int j=i+1;j<nums.size();j++){
                if(nums.get(i)+nums.get(j)<target){
                    count++;
                }
            }
        }
        return count;
    }
}

超级屎山,想减少遍历反而适得其反

class Solution {
    public int countPairs(List<Integer> nums, int target) {
        int count = 0,index = 0;
        Collections.sort(nums);
        for(int i=0;i<nums.size();i++){
            if(nums.get(i)>=target/2)index = i;
        }
        if(index==0)index=nums.size()-1;
        for(int i=0;i<=index;i++){
            for(int j=i+1;j<=index;j++){
                if(nums.get(i)+nums.get(j)<target){
                    count++;
                }
            }
        }
        return count;
    }
}

排序双指针

class Solution {
    public int countPairs(List<Integer> nums, int target) {
        int count = 0;
        int left = 0,right = nums.size()-1;
        Collections.sort(nums);
        while(left<right){
            //根据特征,如果这两个下标值和小于目标值,那么这期间的数字相加都小于下标值
            if(nums.get(left)+nums.get(right)<target){
                count+=right-left;
                left++;
            }else{
                right--;
            }
        }
        return count;
    }
}

标签:小于,下标,target,nums,int,index,数目,public
From: https://www.cnblogs.com/xiaochaofang/p/17650722.html

相关文章

  • 范围中美丽整数的数目
    给你正整数low,high和k。如果一个数满足以下两个条件,那么它是美丽的:偶数数位的数目与奇数数位的数目相同。这个整数可以被k整除。请你返回范围[low,high]中美丽整数的数目。1.数位dpclassSolution{public:intcalc(intnum,intk){strings......
  • vscode 工作区文件数目太多时,代码无法提示补全
    VScode工作区过大时Python插件失效,无法跳转-CSDN根据这篇文章的说法,是由于语言服务器要搜索源文件,文件数目太多时会消耗时间过多,此时表现为ctrl点击模块名/函数名无法跳转(都是白色的,不是彩色的)。打开vscode--输出--Python语言服务器可以看到详细的日志解决方法......
  • 数组下标中值求取算法
    问题解法一1.先计算出所需区间的大小10-2=82.计算当前区间的中值8/2=43.用区间起点加上中值,即为真实的中间值2+4=6完整公式是(end-start)/2+start解法二1.前置扩充所需区间start大小2.后置扩充所需区间start大小3.新的区间大小是12,那么中间值就是6完整公式是(start+e......
  • numpy中的索引下标为None的各种情况
    REFhttps://zhuanlan.zhihu.com/p/486373530?utm_id=0 None实际上是增加了一个维度,它不是原维度的索引。以一维为例x=np.arange(3)#array([0,1,2])(注意,这个一维数组的shape是(3,),而不是(1,3),初学者很容易犯错。)如果想把x的shape变成(1,3),只需要把None放在第一个......
  • 使数组和小于等于 x 的最少时间
    给你两个长度相等下标从0开始的整数数组nums1和nums2。每一秒,对于所有下标0<=i<nums1.length,nums1[i]的值都增加nums2[i]。操作完成后,你可以进行如下操作:选择任一满足0<=i<nums1.length的下标i,并使nums1[i]=0。同时给你一个整数x。请你返回使num......
  • 2023-08-08:给你一棵 n 个节点的树(连通无向无环的图) 节点编号从 0 到 n - 1 且恰好有 n
    2023-08-08:给你一棵n个节点的树(连通无向无环的图)节点编号从0到n-1且恰好有n-1条边给你一个长度为n下标从0开始的整数数组vals分别表示每个节点的值同时给你一个二维整数数组edges其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边一条好路......
  • 2023-08-08:给你一棵 n 个节点的树(连通无向无环的图) 节点编号从 0 到 n - 1 且恰好有 n
    2023-08-08:给你一棵n个节点的树(连通无向无环的图)节点编号从0到n-1且恰好有n-1条边给你一个长度为n下标从0开始的整数数组vals分别表示每个节点的值同时给你一个二维整数数组edges其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边一条好路径需要......
  • 8.5上下午-斜顶滑环20eg-铲机(当滑块座高度小于15的时候需要用到铲机)
       ......
  • 相机最大连拍数目
    参考如下修改:相机连拍时对应代码逻辑: vendor/mediatek/proprietary/packages/apps/Camera2/feature/setting/continuousshot/src/com/mediatek/camera/feature/setting/ContinuousShotBase.java  ......
  • 18.vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间?
    18.vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间?1.vector越界访问下标std::vector是C++标准库中的一种动态数组,其大小可以根据需要进行调整。当你试图访问一个不存在的元素,即访问超出其当前大小范围的索引时,将会发生越界访问。在C++中,如果你使用operator[......