题解 | #农场牛类别匹配# 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语言。
该题考察的知识点是双指针法,通过左右两个指针从两端向中间逼近,寻找符合条件的配对。
代码的文字解释如下:
- 首先对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,即符合条件的配对数量。