题解 | #找到满足条件的牛群组合#

找到满足条件的牛群组合

https://www.nowcoder.com/practice/8b9ba0f65fa0442b9808a24a18c6462d

  • 题目考察的知识点 : 双指针
  • 题目解答方法的文字分析:
  1. 首先将数组 nums 排序,然后枚举第一只牛 i。接下来,我们使用两个指针 left 和 right,分别表示当前考虑的牛的左右位置。为了满足 nums[i] <= nums[j] <= nums[k] 的条件,我们需要让 left 从 i + 1 开始遍历,而让 right 从数组末尾开始遍历。
  2. 对于每个 left 和 right,我们计算 nums[i] + nums[left] + nums[right] 是否等于目标和 T。如果是,我们就记录这个组合;否则,如果三者之和小于目标和 T,我们将 left 右移一个位置;否则,我们将 right 左移一个位置。
  3. 由于数组已经排好序,因此在每次移动 left 或 right 后,nums[left] 或 nums[right] 都会变得更大或更小,因此不需要再次排序。
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @param target int整型
# @return int整型二维数组
#
class Solution:
    def findThreeCows(self, nums: List[int], target: int) -> List[List[int]]:
        n = len(nums)
        nums.sort()  # 先将数组排序
        ans = []  # 用于存储所有的牛群组合

        for i in range(n - 2):
            if i > 0 and nums[i] == nums[i - 1]:  # 跳过重复的数字
                continue
            left, right = i + 1, n - 1
            while left < right:
                s = nums[i] + nums[left] + nums[right]
                if s == target:
                    ans.append([nums[i], nums[left], nums[right]])
                    left += 1
                    right -= 1
                    while left < right and nums[left] == nums[left - 1]:  # 跳过重复的数字
                        left += 1
                    while left < right and nums[right] == nums[right + 1]:  # 跳过重复的数字
                        right -= 1
                elif s < target:
                    left += 1
                else:
                    right -= 1

        return ans
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

代码飞升_不回私信人...:别这样贬低自己,降低预期,放平心态,跟昨天的自己比。做好自己,反而会效率更高心态更好,加油兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务