二刷leetcode(3)

283移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

代码:

class Solution:
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        #### the first method, 不符合题目的返回值要求,所以不能算数。
        # count = 0
        # for i in nums:
        #     if i == 0:
        #         count += 1
        #         nums.remove(i)
        # nums = nums + [0] * count
        # return nums
    
        #### the second method 
        # count = 0
        # for i in range(len(nums)):
        #     if nums[i] != 0:
        #         nums[count] = nums[i]
        #         count += 1
        # nums[count:] = (len(nums)- count) * [0]
        
        #### the third method:
        # length = len(nums)
        # for i in range(length):
        #     if nums[i]== 0:
        #         nums.remove(nums[i])
        #         nums.append(0)
                
        #### the third method
        length = len(nums)
        k = 0
        for i in range(length):
            if nums[i-k] == 0:
                del nums[i-k]
                nums.append(0)
                k += 1

1两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码:

class Solution2(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        # left = 0
        # right = 0
        # nums_copy = nums.copy()
        # nums.sort()
        # for i in range(0, len(nums) -1):
        #     if nums[i] + nums[i+1] >= target:
        #         left = i
        #         right = i + 1
        #         break
        # # print(left)
        # # print(right)
        # while left >= 0 and right < len(nums):
        #     if nums[left] + nums[right] > target:
        #         left -= 1
        #     elif nums[left] + nums[right] < target:
        #         right += 1
        #     else:
        #         if nums[left] == nums[right]:
        #             return [nums_copy.index(nums[left]), nums_copy.index(nums[right], left+1)]
        #         else:
        #             return [nums_copy.index(nums[left]), nums_copy.index(nums[right])]

  #### the second method
class Solution8:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n = len(nums)
        hash = {}
        for i in range(n):
            complement = target - nums[i]
            if hash.__contains__(complement):
                return [hash[complement], i]
            hash[nums[i]] = i
        raise Exception("No match pair")





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值