Sum类的题目一般这样:

input: nums[], target

output: satisfied arrays/ lists/ number

拿到题目,首先分析:

1. 是几个数的sum

2. sum是要求等于target还是小于还是大于还是closest

3. 返回的是原数组下标还是其他

对于这类题目,我们经常用双指针的方法。即排序后,左指针指向起点,右指针指向终点。

  • 如果sum等于target,加入结果/总数目+1
  • 如果sum大于target,右指针左移
  • 如果sum小于target,左指针右移

还有些情况下,我们需考虑去重。去重有两种方法:

  • 利用HashSet预先存下满足条件的值
  • 指针移动去重

第一种方法由于常常需要更多的空间,所以不太建议。

第二种方法的模板是:先判断值,再去重。(去重是当前的element和它前一个element比较)

这里给出一个 n Sum 的模板

public class Solution {
public void nSum(int[] nums, int target) {
// Check whether input is valid
if (nums == null || nums.length < n) {
return;
} // Sort input array
Arrays.sort(nums); // Fix one parameter
int length = nums.length;
for (int i = 0; i < length - n + 1; i++) {
// Avoid duplicate 1
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
} // Fix more parameters
...
// Until two parameters left // start and end are decided by innerest parameter value
int left = start;
int right = end;
while (left < right) {
int sum = nums[i] + .. + nums[left] + nums[right];
if (sum == target) {
// Some action
left++;
right--;
// Avoid duplicate 2
while (left < right && nums[left] == nums[left - 1]) {
left++;
}
while (left < right && nums[right] == nums[right + 1]) {
right--;
}
} else if (sum < target) {
left++;
while (left < right && nums[left] == nums[left - 1]) {
left++;
}
} else {
right--;
while (left < right && nums[right] == nums[right + 1]) {
right--;
}
}
}
}
}
}

nSum “已知target再求和”类型题目总结:n-2重循环+left/right的更多相关文章

  1. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  2. 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF

    https://www.researchgate.net/post/How_to_determine_unknown_class_using_neural_network 里面有讨论,说是用rbf神经 ...

  3. WCF 已知类型和泛型解析程序 KnownType

    数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...

  4. 【编程题目】n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系,

    36.引用自网友:longzuo(运算)谷歌笔试: 19n 支队伍比赛,分别编号为 0,1,2....n-1,已知它们之间的实力对比关系,存储在一个二维数组 w[n][n]中,w[i][j] 的值代表 ...

  5. 已知json类型根据类型封装集合

    1编写帮助类根绝url得到json public static string Post(string url) { string strURL = url; //创建一个HTTP请求 HttpWebR ...

  6. C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常,不存在从对象类型System.Windows.Forms.DateTimePicker到已知的托管提供程序本机类型的映射。

    一:C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常 其实,这个问题与C#的垃圾回收有关.垃圾回收器管 理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的 垃圾回收器 ...

  7. C# 序列化过程中的已知类型(Known Type)

    WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML.由于类型定义了对象的数据结构,所以无论对于序列化还是反序列化,都必须事先确定对象的类型.如果被序列化对象或者被反序 ...

  8. WCF技术剖析之十三:序列化过程中的已知类型(Known Type)

    原文:WCF技术剖析之十三:序列化过程中的已知类型(Known Type) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话) ...

  9. windows服务器设置文件属性设置去掉隐藏已知文件类型的扩展名(即文件后缀名可见)

    摘要: 1.文件后缀名不可见,系统运维过程容易发生同名不同后缀的文件操作混淆的情况 2.windows系统默认是文件后缀名不可见 3.所以需要更改一下配置. 4.操作步骤如下图: (1)点击组织-文件 ...

随机推荐

  1. php http build query

    http_build_query (PHP 5, PHP 7) http_build_query — 生成 URL-encode 之后的请求字符串 说明¶ string http_build_quer ...

  2. IDEA 使用generator逆向工程生成pojo,mapper

    1.新建立一个MAVEN项目 2.在pom.xml增加配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...

  3. 树莓派系列教程:安装系统与配置环境,使用PuTTy与VNC图形界面远程登录

    本文所需物品清单: Raspberry Pi 3 Model B 主板.SD卡与读卡器(用于烧录系统) 资料整理来源在文尾 需要下载的资源与工具: 推荐系统-Raspbian 树莓派官方深度定制的硬件 ...

  4. maven打jar到私服

    <dependency> <groupId>fakepath</groupId> <artifactId>wcs-java-sdk</artifa ...

  5. sql update set使用case when语句

    1. update TD_XXXsetdjyzmdm=null,djyzmsj=null,DLCS= case when DLCS is null then 1 else DLCS+1 end whe ...

  6. Spring 部署Tomcat 404 错误解决方案

    将Spring项目部署到tomcat后,访问网页出现404错误 HTTP Status 404 – Not Found The origin server did not find a current ...

  7. jeecms 单页静态化方法

    在论坛上去搜,都说可以需要在模型中配置增加字段,看了云里雾里,调试源代码发现原因,方法如下: 步骤一:改模型 模型管理->"单页“栏目模型->添加: channelStatic( ...

  8. Linux Namespace

    转载请注明出处,并保留以上所有对文章内容.图片.表格的来源的描述. 一.Linux Namespace Linux Namespace是Linux提供的一种OS-level virtualizatio ...

  9. 转 --自然语言工具包(NLTK)小结

    原作者:http://www.cnblogs.com/I-Tegulia/category/706685.html 1.自然语言工具包(NLTK) NLTK 创建于2001 年,最初是宾州大学计算机与 ...

  10. php 连接redis

    怎么安装 配置就不说了 最简单的连接方式 <?php //Connecting to Redis server on localhost $redis = new Redis(); $redis ...