leetcode 学习笔记

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  


647Palindromic 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
    
        


238 Product of Array Except Self
利用返回的列表从前往后算一遍,再从后往前算一次即可
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


你可能感兴趣的:(leetcode 学习笔记)