1. 2sum

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

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路1:不对原始数组进行排序,用一遍循环通过Hash来找出满足条件的解

代码1如下:

def twoSum(nums, target):
dicts = {}
for i in range(len(nums)):
if target-nums[i] in dicts:
return [dicts[target-nums[i]], i]
dicts[nums[i]] = i

  

思路2:对原数组进行排序,用首尾指针依次向中间靠拢,来找出满足条件的解。对nums=[2, 7, 11, 5]排完序后得到[2, 5, 7, 11] (相应排序前序号为[0,3,1,2]),让左右指针从两头开始寻找,初始情况下left=0,right=3(注:这里的3是最大索引)。计算它们对应的元素之和,即2+11=13要大于target,说明元素的和需要减小,故left不变,right要变成right-1,这样就变成计算 2+7,而 2+7 刚好等于 target,所以结束循环。循环是结束了,但是并不能返回 [left,right],因为排过序,所以应该返回排序前的索引序号,即返回 [lists[left][1], lists[right][1]]

代码2如下:

def twoSum23(nums, target):
lists = []
for i in range(len(nums)):
lists.append([nums[i], i])
lists = sorted(lists, key = lambda s:s[0])
l = 0; r = len(nums)-1
while(l<r):
if lists[l][0]+lists[r][0]==target:
return [lists[l][1], lists[r][1]]
elif lists[l][0]+lists[r][0]<target:
l+=1
else:
r-=1

2. 3sum

问题:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

思路1:遍历每个数,调用2sum算法,得到和为-num[i]的两个数

代码如下:

def Two_Sum(nums,target):
temp = []
for i in range(len(nums)-1):
for j in range(i+1,len(nums)):
if nums[i] + nums[j] == target:
temp.append([nums[i],nums[j]])
return temp
# nums =[-2,0,1,1,2]
# ret = Two_Sum(nums,target=2)
# print('ret',ret) def threeSum(nums):
Res = {}
R = []
# nums.sort()
for i in range(0,len(nums)-2):
temp = nums[i+1:]
res = Two_Sum(temp,target = -nums[i])
if res != []:
Res[nums[i]] = [j for j in res]
# print(Res)
for key,value in Res.items():
# print(value)
for i in range(len(value)):
R.append([key,value[i][0],value[i][1]]) return max([len(i) for i in R]) R = threeSum([-2,0,1,1,2])
print('R',R)

3. 4sum

4. ksum

2sum,3sum,4sum,ksum的更多相关文章

  1. 2sum、3sum、4sum以及任意连续的数的和为sum、任意连续或者不连续的数的和为sum

    2sum 如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--,逐次判断a[i]+a[j]?=sum,如果某一刻a[i]+a ...

  2. leetcode: 哈希——two-sum,3sum,4sum

    1). two-sum Given an array of integers, find two numbers such that they add up to a specific target ...

  3. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

  4. 【LeetCode】四数之和【排序,固定k1,k2,二分寻找k3和k4】

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

  5. Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦

    Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...

  6. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  7. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  8. 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  9. 阿里云学生优惠Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案

     前言: 这几天终于还是按耐不住买了一个月阿里云的学生优惠.只要是学生,在学信网上注册过,并且支付宝实名认证,就可以用9块9的价格买阿里云的云服务ECS.确实是相当的优惠. 我买的是Windows S ...

随机推荐

  1. Django----djagorest-framwork源码剖析

    restful(表者征状态转移,面向资源编程)------------------------------------------->约定 从资源的角度审视整个网络,将分布在网络中某个节点的资源 ...

  2. 启动weblogic报错:string value '2.4' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee

    启动报错: 原因:有人改动了web.xml的头 解决方法: 在web.xml中修改抬头为: <?xml version="1.0" encoding="UTF-8& ...

  3. ThinkPHP最简教程

    这里不讲原理,只讲操作. 这里不说MVC,只说目录(文件夹)结构. 假设Apache Http Server.PHP.MySql都已经安装完毕并已配置完毕,能够输出phpinfo(). 框架是什么? ...

  4. 微信token验证失败的几种情况

    最近在研究用PHP做微信开发的时候,“修改配置时”,总是遇到token验证失败的提示.历经一番查找,种种输出日志和echo,发现,如果不echo调试信息,也不写日志,就不需要ob_clean(),如果 ...

  5. iOS 精简Controlelr代码的两个方法

    MVC是苹果推荐使用的iOS APP架构.后来又有MVVM,MVP等架构出现.主要目的是让业务逻辑.展示.数据各个层级解耦.实现最大程度上的代码复用. 对MVC这种架构来说,随着APP中模的增多,控制 ...

  6. [daily][mirror][daemonlogger][tc] 我想把一个网卡(port A)的流量,镜像到虚拟机的一个网卡(port VA)上去

    iptables tee 模块 https://blog.gnuers.org/?p=740 http://blog.csdn.net/wesleyflagon/article/details/385 ...

  7. 彻底卸载tv

    1.卸载 2.C:\Program Files (x86),找到teamviewer选项,右击删除 3.开始--输入regedit,打开注册表,找到如下路径:HKEY_LOCAL_MACHINE\SO ...

  8. 《Mysql 引擎》

    一:什么是引擎? - 就是一种数据存取和处理方式. - 在 MySQL 中,引擎是以"插件式"存在的,使我们可以很方便的使用各种引擎. 二:怎么查看数据库支持的引擎? - show ...

  9. caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: 'to_string' is not a member of 'std'解决方法

    https://stackoverflow.com/questions/38369565/how-to-get-learning-rate-or-iteration-times-when-define ...

  10. SHOW STATUS 查看各种类型SQL执行的频率

    通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extendedstatus 命令获得.SHOW STATUS 可以根据需要显示 session 级别的统计结果 ...