Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果

2-sum

IO : 给定 vector 和 target, 从 vector 中寻找两个元素, 其和等于 target

思路

1. 哈希法. 先假设给定 vector 和 target 都不小于0. 设置 target 个桶(0...target-1), 把 vector 中的元素 e 放到第 (e%target) 个桶中. x+y = target. y 就在第 target- x%target 个桶中. 这样当寻找一个元素的另一半时, 只需要到特定的桶里去找了. 这种做法适合于target 不太大同时 vector 中的元素分布较为均匀时才比较好. 当vector 中有小于 0 的元素时, 就对所有元素和target同时加上 minValue.

2. 先排序后查找. 设置两个游标 cur1, cur2 分别指向数组的第一个和最后一个元素, 当 vector[cur1]+vector[cur2] > target 时, cur1++. 否则 cur2--, 直到找到和等于 target 的两个元素

3-sum

IO : 给定 vector 和 target, 从 vector 中寻找三个元素, 其和等于 target

思路

1. 把 3-sum 问题看成是 2-sum 问题的扩展. 先枚举第一个元素 e , 然后问题转化为从vector中找到两个元素, 其和等于 target-e.value

细节

1. 第一次做的时候, 我简单的在 3-sum 的函数中嵌套了个 2-sum 的代码. 因第一个元素已被枚举, 所以 2-sum 函数进行查找的时候加上了判断条件, 结果使得修改后的 2-sum

函数变得非常乱, 且有重复计算, debug 花了很长时间. 后来参考别人的代码, 发现只要外面一层 for(i) 循环, st = i+1, 里面用了 while(st<ed) 即可, 省去了很多判重语句. 判重语句是越少越好的

3-sum closest

IO : 给定 vector 和 target, 从 vector 中寻找三个元素, 其和最接近 target

思路

1. 这自然是 3-sum closest 的扩展, 只需要在 while 循环中加上一个记录当前/全局最小距离的两个变量即可

2. 我一直想把这个做法和二分逼近联系到一起, 不过还是证明不出. 我想这应该不算是二分逼近, 反倒是一个不停测试的过程

4-sum

IO : 给定 vector 和 target, 从 vector 中寻找四个元素, 其和等于 target

1. 预处理, 枚举 vector 中所有的二元和, 然后将题目转化为找出两个二元和, 其值等于 target

Single Number I

IO : Given an array of integers, every element appears twice except for one. Find that single one

思路

1. 每个元素出现两次, 那么两个元素相减, 最后剩下的就是所求. res = a[i] - res;

2. 将减法换成异或运算 res = a[i] ^ res;

Single Number II

IO : Given an array of integers, every element appears three times except for one. Find that single one

思路:

1. 设置一个 大小为 32 (int 为 4byte) 的桶, 若 integer 在第 i 位为1, 则第 i 个桶数字加 1. 最后, 把桶里不是 3 的倍数的那些 1 组合起来拼成结果

K - problem 问题的更多相关文章

  1. UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律

    UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...

  2. UVa 10025: The ? 1 ? 2 ? ... ? n = k problem

    这道题仔细思考后就可以得到比较快捷的解法,只要求出满足n*(n+1)/2 >= |k| ,且n*(n+1)/2-k为偶数的n就可以了.注意n==0时需要特殊判断. 我的解题代码如下: #incl ...

  3. UVa10025-The ? 1 ? 2 ? ... ? n = k problem

    分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k:且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找 因为 ...

  4. YOURPHP的分页完整版

    html代码 <?php print_r($ser['searchtype']);?> <select name="searchtype"> <opt ...

  5. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  6. UVA 10025 (13.08.06)

     The ? 1 ? 2 ? ... ? n = k problem  Theproblem Given the following formula, one can set operators '+ ...

  7. 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)

    题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 输入: 每个测试案例包括n+1行: 第一行为2 ...

  8. 剑指OFFER之把数组排成最小的数(九度OJ1504)

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...

  9. 【原创】UVAOJ水题10025解题报告

    首先是原题,转自UVAOJ  The ? 1 ? 2 ? ... ? n = k problem  The problem Given the following formula, one can s ...

随机推荐

  1. multi-mechanize error: can not find test script: v_user.py问题

    从github上下载,安装multi-mechanize,新建工程,运行工程报错. 环境: win7-x64, python 2.7 multi-mechanize can not find test ...

  2. biicode:一个现代的 C 依赖管理器

    因为经营原因,公司已经倒闭了. Biicode (just the company) post-mortemPosted on August 11, 2015 by biicode TeamThis ...

  3. 纯CSS3实现漂亮的价格表样式代码

    分享一款纯CSS3实现漂亮的价格表样式代码是一款常见的主机商发布产品价格信息页.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="main" ...

  4. MongoDB学习之(一)安装

    第一步:下载MongoDB的安装版进行安装 https://pan.baidu.com/s/1X3hIqORJ61TCG1UJ_yr6ag 由于第二次安装出现一些问题,所有还是记录一下,免得以后踩坑. ...

  5. aspx小集合

    1.注意GroupName <asp:RadioButton ID="rdoF" runat="server" Text="男" Ch ...

  6. js实现分页的几个源码,看完基本就懂了

    第一种:   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...

  7. Android——对话框1(一般、选择、自定义、进度条)

    xml <Button android:layout_width="match_parent" android:layout_height="wrap_conten ...

  8. ansible result.stdout.find('running') != -1 判断状态

    [root@m01 ansible-playbook]# cat test_1103.yml ---- hosts: webserver  tasks:    - file: path=/tmp/{{ ...

  9. WPF教程三:布局之WrapPanel面板

    WrapPanel:环绕面板 WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行. Orientatio ...

  10. java-servlet 新增特性 注释

    package com.gordon.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...