题解 | #农场牛类别匹配# java

农场牛类别匹配

https://www.nowcoder.com/practice/270db1e1d65b4366a49a517ec7822912

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param breeds int整型一维数组
     * @param target_sum int整型
     * @return int整型
     */
    public int countMatchingPairs (int[] breeds, int target_sum) {
        // write code here
        Arrays.sort(breeds);
        int left = 0, right = breeds.length - 1;
        int res = 0;
        while (left < right) {
            if (breeds[left] + breeds[right] < target_sum) {
                left++;
            } else if (breeds[left] + breeds[right] == target_sum) {
                left++;
                res++;
            } else {
                right--;
            }
        }
        return res;
    }
}

Java语言。

该题考察的知识点是双指针法,通过左右两个指针从两端向中间逼近,寻找符合条件的配对。

代码的文字解释如下:

  1. 首先对breeds数组进行排序,以便使用双指针法。
  2. 使用left和right两个指针,分别指向数组的最左端和最右端。
  3. 初始化res为0,用于计数符合条件的配对数量。
  4. 进入while循环,当left小于right时执行以下操作:如果breeds[left] + breeds[right]小于target_sum,则将left指针向右移动一位,因为数组已排序,右移可以使得和更接近目标值。如果breeds[left] + breeds[right]等于target_sum,则将left指针向右移动一位,并将res加一,表示找到了一个符合条件的配对。如果breeds[left] + breeds[right]大于target_sum,则将right指针向左移动一位,因为数组已排序,左移可以使得和更接近目标值。
  5. 循环结束后返回res,即符合条件的配对数量。
全部评论

相关推荐

04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务