leetcode-python 第十一周

来源:互联网 发布:平湖市行知小学教师表 编辑:程序博客网 时间:2024/05/12 08:42

每天坚持做题不容易,虽然很多题目都是参考别人的思维,但是我想做过总会有印象的,像dfs这种东西刚开始不熟,后面写多了就知道个大概模式了,自己加油吧!!!

1. Top K Frequent Elements [55ms]

# 方法1:自己写的哈希表,因为不知道get函数,所以sort出来的是元组,还需要后面的计算,超时# 方法2:参考dicuss用get方法,大数据量不超时class Solution(object):    def topKFrequent(self, nums, k):        """        :type nums: List[int]        :type k: int        :rtype: List[int]        """        hashTable = {}        for i in nums:            if i not in hashTable.keys():                hashTable[i] = 1            else:                hashTable[i] += 1        sortK = sorted(hashTable.items(), key=lambda d: d[1], reverse=True)        print(sortK)        ans = []        for i in range(len(sortK[:k])):            ans.append(sortK[i][0])        return ansclass Solution(object):    def topKFrequent(self, nums, k):        """        :type nums: List[int]        :type k: int        :rtype: List[int]        """        hashTable = {}        for num in nums:            if num in hashTable:                hashTable[num] += 1            else:                hashTable[num] = 0        ans = sorted(hashTable, key=hashTable.get, reverse=True)        return ans[:k]

2. String to Interger(atoi) [80ms]

# 方法1:首先要过滤掉开始的空格和0# 然后在判断符号和过滤中间的空格和0# 如果遇到符号就要判断后面的数# 最后溢出检测class Solution(object):    def myAtoi(self, str):        """        :type str: str        :rtype: int        """        if len(str) < 1:            return 0        sign = 1        i = 0        ans = 0        while str[i] == " " or str[i] == "0":            i += 1        if str[i] == "-":             sign = -1            i += 1        elif str[i] == "+":            i += 1        else:            while str[i] == " " or str[i] == "0":                i += 1        while (i < len(str)) and (str[i] in "0123456789"):            ans = ans * 10 + int(str[i])            i += 1        if sign * ans > 2**31 - 1:            return 2**31 - 1        elif sign * ans < -2**31:            return -2**31        else:            return sign * ans

3.Find the Difference [72ms]

# 方法1:哈希表class Solution(object):    def findTheDifference(self, s, t):        """        :type s: str        :type t: str        :rtype: str        """         d = {}        for i in s:            if i not in d.keys():                d[i] = 1            else:                d[i] += 1        for j in t:            if j in d.keys():                d[j] -= 1                if d[j] == 0:                    del d[j]            else:                return j        for i in d.keys():            return d[i]

4.Implement strStr() [68ms]

# 方法1:双指针法,其实总共用了三个指针class Solution(object):    def strStr(self, haystack, needle):        if len(needle) == 0:            return 0        ans = -1        for h in range(len(haystack) - len(needle) + 1):            if haystack[h] == needle[0]:                nn = 1                n = h + 1                while nn < len(needle):                    if haystack[n] == needle[nn]:                        nn += 1                        n += 1                    else:                        break                if nn == len(needle):                    ans = h                    break        return ans

5.Intersection of Two Array [45ms]

# 方法1:哈希表 [89ms]# 方法2:参考discuss的two pointer,先移动到相同的位置# 再判断ans是否为空或者是可行解 [45ms]class Solution(object):    def intersection(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: List[int]        """        ans = []        if len(nums1) == 0 or len(nums2) == 0:            return ans        hashTable = {}        for i in nums1:            if str(i) not in hashTable.keys():                hashTable[str(i)] = 1        for j in nums2:            if str(j) in hashTable.keys():                ans.append(j)                del hashTable[str(j)]        return ansclass Solution(object):    def intersection(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: List[int]        """        ans = []        nums1.sort()        nums2.sort()        i = j = 0        while i < len(nums1) and j < len(nums2):            if nums1[i] > nums2[j]:                j += 1            elif nums1[i] < nums2[j]:                i += 1            else:                if len(ans) == 0 or nums1[i] != ans[-1]:                    ans.append(nums1[i])                i += 1                j += 1        return ans

6.Reverse String [64ms]

# 方法1:自己写的双指针# 方法2:用内置方法比自己写的快多了class Solution(object):    def reverseString(self, s):        """        :type s: str        :rtype: str        """        tmp = list(s)        low, high = 0, len(s) - 1        while low < high:            tmp[low], tmp[high] = tmp[high], tmp[low]            low += 1            high -= 1        return "".join(tmp)class Solution(object):    def reverseString(self, s):        """        :type s: str        :rtype: str        """        s = list(s)        s.reverse()        return "".join(s)

7.Single Number [52ms]

# 方法1:利用异或运算class Solution(object):    def singleNumber(self, nums):        """        :type nums: List[int]        :rtype: int        """        for i in range(1, len(nums)):            nums[0] ^= nums[i]        return nums[0]
0 0
原创粉丝点击