网易互娱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]