原版 sorted

[抄题]:

[思维问题]:

存sum - nums[i](补集),若出现第二次则调出

[一句话思路]:

hashmap中,重要的数值当做key,角标当做value.

[画图]:

[一刷]:

[总结]:

[复杂度]:n/n

[英文数据结构,为什么不用别的数据结构]:

2根指针 n^2

[其他解法]:2根指针 j=i + 1

[题目变变变]:

Subarray Sum Equals K map

Two Sum IV - Input is a BST

class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
result[0] = map.get(target - nums[i]);
result[1] = i; return result;
}
map.put(nums[i],i);
}
return result;
}
}

closest

[抄题]:

找到两个数字使得他们和最接近target

[思维问题]:

j = i + 1, 复杂度平方,不行

[一句话思路]:

排序后,两根指针都往中间走,能比较大小。降低复杂度。

[画图]:

[一刷]:

  1. corner case是数组长度不足2
  2. 每一块代码要分开

[总结]:同样是两根指针,用排序可以降低遍历的复杂度

[复杂度]:两根指针是n^2/1

[英文数据结构,为什么不用别的数据结构:

[其他解法]:

[题目变变变]:(都用的排序)返回和小于等于、大于target的对数;3 sum closest

/**
* 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ public class Solution {
/**
* @param nums an integer array
* @param target an integer
* @return the difference between the sum and the target
*/
public int twoSumClosest(int[] nums, int target) {
if (nums == null || nums.length < 2) {
return -1;
} Arrays.sort(nums); int left = 0, right = nums.length - 1;
int diff = Integer.MAX_VALUE; while (left < right) {
if (nums[left] + nums[right] < target) {
diff = Math.min(diff, target - nums[left] - nums[right]);
left++;
} else {
diff = Math.min(diff, nums[left] + nums[right] - target);
right--;
}
} return diff;
}
}

 返回小于、大于的对数

[抄题]:

给定一个整数数组,找出这个数组中有多少对的和是小于或等于目标值。返回对数。

[思维问题]:

不理解cnt为什么是right - left,因为中间的数其实都可以。

有数组先排序。

[一句话思路]:

类似于closest,两边都往中间靠,调节sum的大小。

[画图]:

[一刷]:

  1. corner case表示不存在的对数时,返回0
  2. 一定要写排序,不排序啥都完了。类名是Arrays,不是Array。
  3. 之前的数组[2]是有上下限即可在循环中返回,此时cnt要累积才能返回。

[总结]:

用排序降低复杂度,两边往中间靠。

[复杂度]:

[英文数据结构,为什么不用别的数据结构]:

[其他解法]:

[题目变变变]:

public Class Solution {

 public int twoSums5(int[] nums, int target) {

    if (nums.length < 2 || nums.length == null) {
return 0;
} int left = 0;
int right = nums.length - 1;
int cnt = 0; Arrays.sort(nums);//
while(left < right) {
int v = nums[left] + nums[right];
if (v <= target) {
left ++;
}
else {
cnt += right - left;
right —;
}
} return cnt;
}
}

组成不同的对数

[抄题]:

给一整数数组, 找到数组中有多少组 不同的元素对 有相同的和, 且和为给出的 target 值, 返回对数.

[思维问题]:

不知道左右两个指针移动多少。其实是切入点不对:直接从目标v = target切入,大了right--, 小了left++。

corner case是连续的值都相等,nums[right] == nums[right + 1],没想到。

[一句话思路]:

[画图]:

[一刷]:

  1. 是两边往中间靠,所以nums[right] == nums[right + 1]时,也是right--, 不是++。

[总结]:

closest,小于或大于的对数,组成不同的对数 都是排序+两根指针的做法

[复杂度]:

[英文数据结构,为什么不用别的数据结构]:

[其他解法]:

[题目变变变]:

public class Solution {
public int twoSum6(int nums[], int target) {
if (nums.length < 2 || nums == null) {
return 0;
} Arrays.sort(nums);
int left = 0;
int right = nums.length - 1;
int count = 0;
int v = nums[left] + nums[right]; while(left < right) {
if (v == target) {
left++;
right—;
count++;
}
while((left < right) && (nums[right] == nums[right + 1])) {
right—;//
}
while((left < right) && (nums[left] == nums[left - 1])) {
left++;
}
}
else if(v > target) {
right—;
}
else {
left++;
} return count;
}
}

(hash map)Two Sum, sorted(排序+双指针)closest,小于或大于的对数,组成不同的对数的更多相关文章

  1. lambda匿名函数,sorted排序,filter()筛选,map()映射

    一丶匿名函数 语法: 函数名 = lambda参数:返回值 # 普通的正常的函数 def func(n): return n * n ret = func(9) print(ret) # 匿名函数 a ...

  2. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  3. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  4. Redis 5 种基本数据结构(String、List、Hash、Set、Sorted Set)详解 | JavaGuide

    首发于:Redis 5 种基本数据结构详解 - JavaGuide 相关文章:Redis常见面试题总结(上) . Redis 5 种基本数据结构(String.List.Hash.Set.Sorted ...

  5. 京东云开发者| Redis数据结构(二)-List、Hash、Set及Sorted Set的结构实现

    1 引言 之前介绍了Redis的数据存储及String类型的实现,接下来再来看下List.Hash.Set及Sorted Set的数据结构的实现. 2 List List类型通常被用作异步消息队列.文 ...

  6. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  7. Hash Map (Hash Table)

    Reference: Wiki  PrincetonAlgorithm What is Hash Table Hash table (hash map) is a data structure use ...

  8. python sorted排序用法详解

    sorted排序 python sorted 排序 1. operator函数在介绍sorted函数之前需要了解一下operator函数. operator函数是python的内置函数,提供了一系列常 ...

  9. Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序

    在上一讲中, 我们着重的讲了表达式的一些基础知识和基本的使用, 今天我们来实战一把, 对Map的Value值排序进行简化. 在以前的思路我们的做法如下: /** * * Map根据value排序; * ...

随机推荐

  1. System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。

    好久没写博客了,今天突然遇到个神奇的问题. 做好的网站在win10上和Windows sever 2012 上都没有问题,搬到Windows sever 2003上就出现了这么一个错误: Server ...

  2. Web API源码剖析之HttpServer

    Web API源码剖析之HttpServer 上一节我们讲述全局配置.本节将讲述全局配置的DefaultServer,它是一个HttpServer类型. 主要作用就是接受每一次请求,然后分发给消息处理 ...

  3. Oracle直方图的详细解析(转)

    Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工具,并非Oracle专有.通常用于对被管理对象的某个方面的质量情况进行管理,通常情况下它会表现为一种几何图形表,这个图形表是根 ...

  4. 在 mvc 4 中使用 unity 进行依赖注入

    在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...

  5. 内置锁(二)synchronized下的等待通知机制

    一.等待/通知机制的简介 线程之间的协作:   为了完成某个任务,线程之间需要进行协作,采取的方式:中断.互斥,以及互斥上面的线程的挂起.唤醒:如:生成者--消费者模式.或者某个动作完成,可以唤醒下一 ...

  6. python拓展1 week1-week5复习回顾

    知识内容: 1.python基础概念及基础语法 2.python基础数据类型 3.python模块相关 4.python函数相关 5.python面向对象相关 6.python文件处理相关 注:本节内 ...

  7. MNIST数据集入门

    简单的训练MNIST数据集 (0-9的数字图片) 详细地址(包括下载地址):http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html # ...

  8. Java-IntegerCache

    Integer类里面有一个私有的静态内部类IntegerCache类加载时,有一段静态块代码,如下 static final int low = -128; static final int high ...

  9. 国内各类“壳子”浏览器,userAgent 一览

    [测试环境]:测试日期:2014-6-20 我本机的chrome是36.0的,IE是10.0的.下列各浏览器大多数都是最新版,少数是半年以内的版本. 内核 chrome 版本 36.0 userAge ...

  10. js运动框架逐渐递进版

    运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓冲运动. 多物体运动 ...