479 · 数组第二大数
在数组中找到第二大的数。
def secondMax(self, nums):
nums.sort()
return nums[-2]
官方答案,打擂台:
def secondMax(self, nums):
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):
que = []
heapq.heapify(que)
for num in nums:
heapq.heappush(que, num)
if len(que) > 2:
heapq.heappop(que)
return que[0]
235 · 分解质因数
将一个整数分解为若干质因数之乘积。
不会,直接看答案:
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]
if num != 1:
ans += [num]
return ans
1781 · 反转ASCII编码字符串
给定一个由ascii编码的字符串(例如,“ABC”可以编码为“656667”),您需要编写一个将编码字符串作为输入并返回反转的解码字符串的函数。
def reverseAsciiEncodedString(self, encodeString):
s = ""
for i in range(0, len(encodeString), 2):
s += chr(int(encodeString[i:i+2]))
return s[::-1]
1784 · 减小为回文
给定一个由 a-z 组成的字符串 s. 欲通过以下操作把 s 变成回文串: 想了半天没想出来,看了自己之前写的。。。
def numberOfOperations(self, s):
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 · 回文数据流
一个数据流进来,每次一个小写字母,当前数据流的排列是否能组成回文串。 不会,看我之前写的答案,没看懂。
def getStream(self, s):
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
|