Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)

文章目录

479 · 数组第二大数

在数组中找到第二大的数。
Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)

def secondMax(self, nums):
        # write your code here
        nums.sort()
        return nums[-2]

官方答案,打擂台:

def secondMax(self, nums):
        # write your code here
        maxValue = max(nums[0], nums[1])
        secValue = min(nums[0], nums[1])
        
        for i in xrange(2, len(nums)):
            if nums[i] > maxValue:
                secValue = maxValue
                maxValue = nums[i]
            elif nums[i] > secValue:
                secValue = nums[i]
                
        return secValue

之前写的答案:

def secondMax(self, nums):
        # write your code here
        que = []
        heapq.heapify(que)
        for num in nums:
            heapq.heappush(que, num)
            if len(que) > 2:
                heapq.heappop(que)
        return que[0]

235 · 分解质因数

将一个整数分解为若干质因数之乘积。

Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)
不会,直接看答案:
Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)

def primeFactorization(self, num):
        up = int(num**0.5 + 1)
        ans = []
        for i in range(2,up):
            while num % i == 0:
                num /= i
                ans += [i]
        # 若最后剩余数不为1,则为最后一个质因数
        if num != 1:
            ans += [num]
        return ans

1781 · 反转ASCII编码字符串

给定一个由ascii编码的字符串(例如,“ABC”可以编码为“656667”),您需要编写一个将编码字符串作为输入并返回反转的解码字符串的函数。

Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)

def reverseAsciiEncodedString(self, encodeString):
        # Write your code here
        s = ""
        for i in range(0, len(encodeString), 2):
            s += chr(int(encodeString[i:i+2]))
        return s[::-1]

1784 · 减小为回文

给定一个由 a-z 组成的字符串 s. 欲通过以下操作把 s 变成回文串:
Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)
Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)
想了半天没想出来,看了自己之前写的。。。

def numberOfOperations(self, s):
        # Write your code here
        l, r = 0, len(s) - 1
        count = 0
        while l <= r:
            count += abs(ord(s[r]) - ord(s[l])) 
            l += 1
            r -= 1
        return count

958 · 回文数据流

一个数据流进来,每次一个小写字母,当前数据流的排列是否能组成回文串。
Leetcode 刷题必须Review 十三 Lintcode(479 235 1781 1784 958)
不会,看我之前写的答案,没看懂。

def getStream(self, s):
        # Write your code here
        if not s or len(s) == 0: return []

        res = [0 for _ in range(len(s))]
        letters = [0 for _ in range(26)]
        odd_count = 0

        for i, cha in enumerate(s):
            letters[ord(cha) - ord('a')] += 1
            if letters[ord(cha) - ord('a')] % 2 == 1:
                odd_count += 1
            else:
                odd_count -= 1
            
            res[i] = 0 if odd_count > 1 else 1
        
        return res
上一篇:


下一篇:6_66.加一