leetcode 数组,数字和

之前自己已经准备了一段时间算法题,现在想整理出来做一个记录。

1.两数之和(简单)(数组,哈希表)(leetcode1)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:给定 nums = [2, 4, 3], target=7,返回 [1,2]

思路:字典

def twoSum(self, nums, target):

        d={}

        for i in range(len(nums)):

            a=target-nums[i]

            if nums[i] in d:

                return d[nums[i]],i

            else:

                d[a]=i

2.和为S的两个数字(递增排序的数组)(剑指offer)/ 两数之和2-输入有序数组(leetcode167)

示例:给定 nums = [2,3,4], target=7,返回 [3,4]

def FindNumbersWithSum(self, a, tsum):

        i,j=0,len(a)-1

        while i<j:

            sum=a[i]+a[j]

            if sum==tsum:

                return [a[i],a[j]]

            if sum<tsum:

                i+=1

            if sum>tsum:

                j-=1

        return []

3.和为S的连续正数序列(剑指offer

示例:和为100的序列, 返回:18,19,20,21,22

def FindContinuousSequence(self, tsum):

        head,last,sum=1,2,3

        temp=[]

        while last<=(sum+1)/2:

            if sum==tsum:

                temp.append(range(head,last+1))

                sum-=head

                head+=1

            if sum>tsum:

                sum-=head

                head+=1

            if sum<tsum:

                last+=1

                sum+=last

        return temp

4.三数之和(中等)(数组,双指针)(leetcode15)

给定一个包含n个整数的数组nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。

示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],返回:[[-1, 0, 1],[-1, -1, 2]]

def threeSum(self, nums):

        nums.sort()

        res=[]

        for a in range(len(nums)-2):

            if a>0 and nums[a]==nums[a-1]:

                continue

            target= -1 * nums[a]

            i,j=a+1,len(nums)-1

            while i<j:

                if nums[i]+nums[j]==target:

                    res.append([nums[a],nums[i],nums[j]])

                    i=i+1

                    while i<j and nums[i]==nums[i-1]:

                        i=i+1

                elif nums[i]+nums[j]<target:

                    i=i+1

                else:

                    j=j-1

        return res

5.最接近的三数之和(中等)(数组,双指针)(leetcode16)

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], target = 1.返回:最接近和为 2. (-1 + 2 + 1 = 2).

def threeSumClosest(self, nums, target):

        nums.sort()

        res=sum(nums[:3])

        for a in range(len(nums)):

            i,j=a+1,len(nums)-1

            while i<j:

                temp=nums[a]+nums[i]+nums[j]

                if abs(res-target)>abs(temp-target):

                    res=temp

                elif temp>target:

                    j-=1

                else:

                    i+=1

        return res

6.四数之和(中等)(leetcode18)

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和d 使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

示例:给定数组nums=[1, 0, -1, 0, -2, 2],target=0.返回:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]

 

7.四数相加2(中等)(leetcode454)

 

8.两数相加(中等)(链表)(leetcode2)

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8原因:342 + 465 = 807

def addTwoNumbers(self, l1, l2):

        carry=0

        res=pre=ListNode(0)

        while l1 or l2 or carry:

            if l1:

                carry+=l1.val

                l1=l1.next

            if l2:

                carry+=l2.val

                l2=l2.next

            carry,val=divmod(carry,10)      #进位carry

            pre.next=pre= ListNode(val)     #pre.next = ListNode(val) , pre = pre.next

        return res.next

 

9.两数相加2(中等)(leetcode445)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值