题解 | #草原上的牛群分布#

草原上的牛群分布

https://www.nowcoder.com/practice/25752634aa444758843eed6ff227703a

  • 题目考察的知识点 : 数组如何去重,双指针的使用
  • 题目解答方法的文字分析:

使用双指针方法来实现,在遍历整个数组时,维护一个指针 i 表示当前位置,以及一个计数器 count 表示当前位置上的牛群数量。如果当前位置与前一个位置相同,则将计数器加 1;否则,更新指针并将计数器重置为 1。如果发现某个位置上的牛群数量超过了 3 头,则需要将多余的牛群移到后面的位置。

具体来说,我们可以使用另一个指针 j 来表示下一个可用的位置。当 count 小于等于 3 时,将当前位置的元素复制到 j 所在的位置,并将 i 和 j都向右移动一位;否则,只将 i 向右移动一位,而将 j 留在原地等待后续的元素。最后,返回的长度应该为指针 j 的位置,因为它指向的是可用的下一个位置

  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @return int整型
#
class Solution:
    def remove_duplicates_v3(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return 0
        i = 0  # 指向数组中当前牛群位置
        count = 1  # 当前位置上的牛群数量

        for j in range(1, len(nums)):
            if nums[j] == nums[j - 1]:
                # 如果当前位置与前一个位置相同
                if count < 3:
                    # 如果当前位置上的牛群数量未满 3 头,则将牛群移动到数组中
                    i += 1
                    nums[i] = nums[j]
                    count += 1
            else:
                # 如果当前位置与前一个位置不相同
                # 将牛群移动到数组中,并重置计数器
                i += 1
                nums[i] = nums[j]
                count = 1

        # 返回重新分布的数组长度
        return i + 1
牛客高频top202题解系列 文章被收录于专栏

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

全部评论

相关推荐

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

创作者周榜

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