网易互娱4.11数据挖掘笔试编程题

第一题,数组中三数之和等于目标值的个数,重复的也要算上
AC代码
def solution(nums,target):
    nums.sort()
    res=0
    for i in range(len(nums)-2):
        l,r=i+1,len(nums)-1
        total=0
        stop=False
        while l<r and not stop:  #双指针法
            if nums[i]+nums[l]+nums[r]<target:
                l+=1
            elif nums[i]+nums[l]+nums[r]>target:
                r-=1
            elif nums[i]+nums[l]+nums[r]==target:
                if nums[l]==nums[r]:
                    res+=(r-l+1)*(r-l)//2  # 从r-l+1个数中任取两个的组合数
                    stop=True
                else:
                    l_count,r_count=1,1  #计算左边和右边分别有几个重复值
                    while nums[l]==nums[l+1]:
                        l_count+=1
                        l+=1
                    while nums[r]==nums[r-1]:
                        r_count+=1
                        r-=1
                    res+=l_count*r_count
                    l+=1
                    r-=1
    return res
第二题,非连续最大子数组和
AC代码
def solution(nums):
    dp=[0]*(len(nums)+1)
    dp[1]=nums[0]
    for i  in range(1,len(nums)):
        dp[i+1]=max(dp[i],dp[i-1]+nums[i])
    return dp[-1]



#网易互娱笔试##网易互娱##笔试题目#
全部评论
三数之和计数; 打家劫舍I; AC*2
1 回复 分享
发布于 2020-04-11 20:44
啥方向啊
点赞 回复 分享
发布于 2020-04-11 20:23
第一题排序之后i j k顺序不就没办法保证了吗
点赞 回复 分享
发布于 2020-04-11 20:28
服务端开发四道编程
点赞 回复 分享
发布于 2020-04-11 20:29
差了左右指针相等的情况了。怪不得一直卡不过。暴力法只过80%
点赞 回复 分享
发布于 2020-04-11 21:12
小灿女神那道题咋做啊
点赞 回复 分享
发布于 2020-04-11 21:18

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
评论
3
11
分享
牛客网
牛客企业服务