K - problem 问题
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 问题的更多相关文章
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- UVa 10025: The ? 1 ? 2 ? ... ? n = k problem
这道题仔细思考后就可以得到比较快捷的解法,只要求出满足n*(n+1)/2 >= |k| ,且n*(n+1)/2-k为偶数的n就可以了.注意n==0时需要特殊判断. 我的解题代码如下: #incl ...
- UVa10025-The ? 1 ? 2 ? ... ? n = k problem
分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k:且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找 因为 ...
- YOURPHP的分页完整版
html代码 <?php print_r($ser['searchtype']);?> <select name="searchtype"> <opt ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- UVA 10025 (13.08.06)
The ? 1 ? 2 ? ... ? n = k problem Theproblem Given the following formula, one can set operators '+ ...
- 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)
题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 输入: 每个测试案例包括n+1行: 第一行为2 ...
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...
- 【原创】UVAOJ水题10025解题报告
首先是原题,转自UVAOJ The ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can s ...
随机推荐
- py自动化之环境配置
1,官网下载py,点击安装,配置环境变量 2,下载setuptools,用于安装pip (python setup.py install) 3,下载pip,用于安装selenium(pip insta ...
- 深入理解Eureka - Eureka配置列表
Eureka包含四个部分的配置 instance:当前Eureka Instance实例信息配置 client:Eureka Client客户端特性配置 server:Eureka Server注册中 ...
- 一款纯css3实现的漂亮的404页面
之前为大家分享了那些创意有趣的404页面, html5和css3打造一款创意404页面, HTML5可爱的404页面动画很逗的机器人.今天再给大家分享一款纯css3实现的漂亮的404页面.效果图如下: ...
- 几行css3代码实现超炫加载动画
之前为大家分享了css3实现的加载动画.今天为大家带来一款只需几行代码就可以实现超炫的动画加载特效.我们一起看下效果图: 在线预览 源码下载 实现代码: 极简的html代码: <div> ...
- webrtcchatde源代码下载
这个是源代码地址: http://download.csdn.net/detail/duerbin3/5433617 这个demo是国内牛人赵书剑开发的视频聊天室,基于webrtc.io实现. 该项目 ...
- win7 64位安装oracle10g客户端心得
用了整整两天时间才在64位Win7下装好了Oracle的开发环境(包括Oracle的客户端和第三方客户端工具),过程原来和32位类似,注意不能下载64位的安装包. 安装过程: 1.下载Oracle 1 ...
- uboot中CMD的实现
CMD配置位于config_cmd_default.h configs/at91/sam9g10ek.h 头文件位于include/command.h 41 struct cmd_tbl_s { ...
- vmware克隆Centos6.4虚拟机网卡无法启动问题
vmware克隆Centos6.4虚拟机网卡无法启动问题 2014-02-26 16:44:54 标签:老男孩培训 vmware克隆问题 网卡无法启动 ...
- libmysqlclient16 libmysqlclient-dev
如果提示安装 libmysqlclient16 则用 libmysqlclient-dev 代替之
- C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...