博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Two Sum - Unique pairs Lintcode
阅读量:5138 次
发布时间:2019-06-13

本文共 2213 字,大约阅读时间需要 7 分钟。

Given an array of integers, find how many unique pairs in the array such that their sum is equal to a specific target number. Please return the number of pairs.

Example

Given nums = [1,1,2,45,46,46], target = 47

return 2

1 + 46 = 47

2 + 45 = 47

 

这道题还蛮简单的,就是从两头往中间算就可以了。需要注意的是,把while放在相等的情况里面,可以加快速度。

原始版本:

public class Solution {    /**     * @param nums an array of integer     * @param target an integer     * @return an integer     */    public int twoSum6(int[] nums, int target) {        if (nums == null || nums.length == 0) {            return 0;        }        Arrays.sort(nums);        int start = 0;        int end = nums.length - 1;        int count = 0;        while (start < end) {            if (start > 0 && nums[start] == nums[start - 1]) {                start++;                continue;            }            if (end < nums.length - 1 && nums[end] == nums[end + 1]) {                end--;                continue;            }            if (nums[start] + nums[end] < target) {                start++;            } else if (nums[start] + nums[end] > target) {                end--;            } else {                count++;                start++;            }        }        return count;    }}

改进版本:

public class Solution {    /**     * @param nums an array of integer     * @param target an integer     * @return an integer     */    public int twoSum6(int[] nums, int target) {        if (nums == null || nums.length == 0) {            return 0;        }        Arrays.sort(nums);        int start = 0;        int end = nums.length - 1;        int count = 0;        while (start < end) {                                    if (nums[start] + nums[end] < target) {                start++;            } else if (nums[start] + nums[end] > target) {                end--;            } else {                count++;                start++;                end--;                while (start < end && nums[start] == nums[start - 1]) {                    start++;                }                while (start < end && nums[end] == nums[end + 1]) {                    end--;                }            }        }        return count;    }}

 

转载于:https://www.cnblogs.com/aprilyang/p/6701586.html

你可能感兴趣的文章
iOS UIView 基本属性用法
查看>>
Android硬件加速
查看>>
iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
查看>>
B - Assignment
查看>>
php生成Exeple表demo
查看>>
[LeetCode]Gas Station
查看>>
清除PLSQL Developer访问数据库连接的历史记录
查看>>
markdown解析与着色
查看>>
HDU5653 Bomber Man wants to bomb an Array 简单DP
查看>>
Python学习---生成器的学习1210
查看>>
设置eclipse启动时所需要的jdk
查看>>
SQLServer分页存储过程
查看>>
PHP平均小数红包算法
查看>>
IntelliJ IDEA 2017.3 配置Tomcat运行web项目教程(多图)
查看>>
蛋痛的C#和.net,采集问题(小数点)
查看>>
zabbix使用percona插件监控mysql
查看>>
反转String 1
查看>>
[文章]大数据实时处理:百分点实时计算架构和算法
查看>>
tomcat放置静态html页面
查看>>
【Demo 0012】进程与线程
查看>>