leetcode-python 第一周

来源:互联网 发布:wmf榨汁机 知乎 编辑:程序博客网 时间:2024/06/06 06:39

LeetCode Online Judge
https://leetcode.com/

LeetCode题解
https://github.com/soulmachine/leetcode

1.Two Sum [2968ms]

#思路1:暴力[5804ms]#思路2:哈希[2968ms]class Solution(object):    def twoSum(self, nums, target):        result = []        for i in range(len(nums)):            for j in range(i+1, len(nums)):                if nums[i] + nums[j] == target:                    result.append(i)                    result.append(j)                    return resultclass Solution(object):    def twoSum(self, nums, target):        result = []        hashtable = {}        for i in range(len(nums)):            hashtable[str(nums[i])] = i        for j in range(len(nums)):            tmp = str(target - nums[j])            if tmp in hashtable.keys() and hashtable[tmp] != j:                result.append(j)                result.append(hashtable[tmp])                return sorted(result)

2.Remove Duplicates from Sorted Array [108ms]

#思路1:j代表已经确实符合题目的索引,更新前自增class Solution(object):    def removeDuplicates(self, nums):        if len(nums) == 0 :            return 0        length = 1        j = 0        for i in range(1, len(nums)):            if nums[j] != nums[i]:                j += 1                length += 1            nums[j] = nums[i]        return length

3.Remove Duplicates from Sorted Array II [82ms]

#方法1:index表示符合条件的下一个索引,未确认的#因为最多重复两次#如果和{index-2}相同则为重复元素,索引不动等待替代#如果不同,则把{i}和{index}交换class Solution(object):    def removeDuplicates(self, nums):        if len(nums) <= 2:            return len(nums)        index = 2        for i in range(2, len(nums)):            if nums[i] != nums[index-2]:                nums[index] = nums[i]                index += 1        return index

4.Search in Rotated Array [62ms]

#方法1:虽然是旋转的数组,但是两边肯定有一边是正序的#平时的二分只需要判断中间的元素,这里多一布判断左右那边是正序#high刚开开始指向的是无效的,后来更新也指向已经搜索过的#因为while循环里的是不相等条件,如果指向mid-1的话,剩下最后一个元素会不进行搜索class Solution(object):    def search(self, nums, target):        if len(nums) == 0:            return -1        low = 0        high = len(nums)        while high != low:            mid = int((low + high) / 2)            if nums[mid] == target:                return mid            if nums[low] < nums[mid]:                if nums[low] <= target and target < nums[mid]:                    high = mid                else:                    low = mid + 1            else:                if nums[mid] < target and target <= nums[high-1]:                    low = mid + 1                else:                    high = mid        return -1

5.Search in Rotated Array II [52ms]

#Search in Rotated Sorted Array II [52ms]#方法1:题目和I很像,只不过在判断多了一条相等的情况#如果相等只能low+1再搜索,因为之前已经判断过相等的情况了#还有就是当剩下两个元素时,mid是指向后面一个元素的class Solution(object):    def search(self, nums, target):        low = 0        high = len(nums)        while low != high:            mid = int((low + high) / 2)            if nums[mid] == target:                return True            if nums[low] < nums[mid]:                if nums[low] <= target and target < nums[mid]:                    high = mid                else:                    low = mid + 1            elif nums[low] == nums[mid]:                low += 1            else:                if nums[mid] < target and target <= nums[high-1]:                    low = mid + 1                else:                    high = mid        return False

6.Remove Element [48ms]

#Remove Element [48ms]#方法1:对于删除操作,定义一个遍历变量长度变量#当找到时,删除和长度减一,遍历变量注意保持不变#否则遍历变量自增#方法2:用索引指针,原理跟removeDuplicated类似[64ms]class Solution(object):    def removeElement(self, nums, val):        length = len(nums)        i = 0        while i < length:            if nums[i] == val:                del nums[i]                length -= 1            else:                i += 1        return length

7.Plus One [52ms]

class Solution(object):    def plusOne(self, digits):        carry = 0        for i in range(len(digits)-1, -1, -1):            if carry == 1:                digits[i] += 1                carry = 0            if i == len(digits) - 1 :                digits[i] += 1            if digits[i] >= 10:                digits[i] -= 10                carry = 1        if carry == 1:            digits.insert(0, 1)        return digits
0 0
原创粉丝点击