406.Queue Reconstruction by Height
先对原数组排序 按照第一元素从大到小 再按照第二个元素从小到大;然后一个个遍历,如果满足题目要求而直接进入下一个循环,否则pop再根据第二个元素插入相应位置。
class Solution(object):
def reconstructQueue(self, people):
"""
:type people: List[List[int]]
:rtype: List[List[int]]
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。python3没有。
"""
def my_cmp(p1,p2):
return cmp(p2[1],p1[1]) if p1[0]==p2[0] else cmp(p1[0],p2[0])
#对people排序 按照第一个元素从大到小 第二元素从小到大
people.sort(cmp=my_cmp,reverse=True)
for i in range(len(people)):
#continue指的是直接进入下一次循环
if(people[i][1]==i):
continue
#将此元素pop,再在合适位置插入
tmp=people[i]
people.pop(i)
people.insert(tmp[1],tmp)
return people
647. Palindromic Substrings(算法很妙!!)
初始化空队列queue
将字符串中的所有字符(即每个单个字符都是回文字符),以及长度为2并且形如'aa'的子串的起止下标数对(left, right)加入queue(每个形如“aa”的字符也是回文字符)
循环直到队列为空:
将队首弹出,记为(left, right),将计数器+1
若(left - 1, right + 1)索引范围有效(从此字符两边开始扩展寻找更长的回文字符),并且s[left - 1] == s[right + 1],将其加入queue
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
size = len(s)
queue = collections.deque((x, x) for x in range(size))
for x in range(size - 1):
if s[x] == s[x + 1]:
queue.append((x, x + 1))
ans = 0
while queue:
x, y = queue.popleft()
ans += 1
if x - 1 >= 0 and y + 1 < size and s[x - 1] == s[y + 1]:
queue.append((x - 1, y + 1))
return ans
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
result = [1]
for i in range(1,len(nums)):
result.append(result[i-1] * nums[i-1])
product = 1
for i in range(len(nums)-1,-1,-1):
result[i] = product * result[i]
product *= nums[i]
return result