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 ...
随机推荐
- Spring Boot干货系列:(二)配置文件解析
Spring Boot干货系列:(二)配置文件解析 2017-02-28 嘟嘟MD 嘟爷java超神学堂 前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于 ...
- Mixing ASP.NET Webforms and ASP.NET MVC
https://www.packtpub.com/books/content/mixing-aspnet-webforms-and-aspnet-mvc *********************** ...
- mysql 存入乱码问题
在使用mysql开发是,遇到一问题,java脚本里面的中文很正常,持久化之后数据库里面的数据则变成乱码,解决方式,在spring配置文件连接中加入指定编码格式,有些系统不需要,有些服务器系统需要,统一 ...
- java web 自定义的权限框架
权限框架2部分 1.认证 (通常指登录) 2.授权 (指用户访问改页面是否有权限) 设计:
- java执行shell/cmd命令
try { Process p =Runtime.getRuntime().exec("chmod 777 /home/bomb/MoveToy/WebRoot/a.sh " ); ...
- js数组添加或删除元素
var arr = new Array(); arr[] = "aaa"; arr[] = "bbb"; arr[] = "ccc"; ar ...
- 【C#】Queue的简单试用
新建一个WPF项目,测试C#的Queue类的简单使用. 前台准备两个按钮 MainWindow.xaml <StackPanel VerticalAlignment="Center&q ...
- kubernetes master 高可用一键部署
#地址见:https://github.com/SILLKY/kubernetes-pro/tree/master/Master-HA#包括其他一些文件,适当版本1.6.1#!/bin/bash ho ...
- JavaScrip——练习(做悬浮框再进一步:悬浮窗后缀悬浮窗——用this.className)
对悬浮窗进一步改进: 用this.className 可以省略script <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...
- 爱快AP-H1使用方法及排错
ikuai云平台:https://yun.ikuai8.com/login 底下原文地址:http://bbs.ikuai8.com/thread-25939-1-1.html 前文:使用爱快AP-H ...