题解 | #农场牛类别匹配#
农场牛类别匹配
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) { int count = 0; for (int i = 0; i < breeds.length; i++) { for (int j = i + 1; j < breeds.length; j++) { if ((breeds[i] + breeds[j]) == target_sum) { count++; } } } return count; } }
知识点:
双指针法、通过左右两个指针从两端向中间逼近,寻找符合条件的配对
解题分析:
- 首先对breeds数组进行排序,以便使用双指针法。
- 使用left和right两个指针,分别指向数组的最左端和最右端。
- 初始化res为0,用于计数符合条件的配对数量。
- 进入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指针向左移动一位,因为数组已排序,左移可以使得和更接近目标值。
- 循环结束后返回res,即符合条件的配对数量。
编程语言:
java