美文网首页
统计有序数组里平方和的数目

统计有序数组里平方和的数目

作者: 塔塔斯坦 | 来源:发表于2023-06-12 17:15 被阅读0次

    题目描述

    给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:
    nums = {-1,1,1,1},
    那么你应该返回的是:1。因为这个数组所有数的平方取值都是1,只有一种取值。
    nums = {-1,0,1,2,3}
    你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9

    方法1

    每个都算一次平方,存入hash,去除重复的。时空复杂度O(n)

    方法2 双指针

    时间复杂度O(n), 空间复杂度O(1)

    循环外层,保证左指针不大于右指针一直循环,每次找出一个数,循环完就找完了。
    循环内, 左右边找出一个abs的最大值作为锚,两头同时开始数,和锚一样的都去掉。

    class Solution(object):
        def getSquareCount(self, nums):
            if (len(nums) == 0):
                return 0
            nums = [abs(x) for x in nums]
            left = 0
            right = len(nums) - 1
            result = 0
            while left <= right:
                anchor = max(nums[left], nums[right])
                while left < len(nums) and nums[left] == anchor:
                    left += 1
                while right >= 0 and nums[right] == anchor:
                    right -= 1
                result += 1
            return result
    
    
    if __name__ == '__main__':
        assert 1 == Solution().getSquareCount([-1, 1, 1, 1])
        assert 5 == Solution().getSquareCount([-3, -3, -2, -2, -1, -1, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4])
        assert 4 == Solution().getSquareCount([-1, 0, 1, 2, 3])
    

    相关文章

      网友评论

          本文标题:统计有序数组里平方和的数目

          本文链接:https://www.haomeiwen.com/subject/ovjqydtx.html