Groupon面经Prepare: Max Cycle Length
题目是遇到偶数/2,遇到奇数 *3 + 1的题目,然后找一个range内所有数字的max cycle length。对于一个数字,比如说44,按照题目的公式不停计算,过程是 44, 22, 11, 8, 9 ,1(瞎起的),从44到1的这个sequence的长度,叫做cycle length。然后题目是给一个range,比如[2,300],求这里面所有数字的cycle length的最大值。follow up跑1到1 million
一个数一个数慢慢算,如下算法求出每个数的cycle length
package Sorting;
import java.util.*; public class Solution2 {
public List<Integer> maxCycleLen(int min, int max) {
List<Integer> maxCycle = new ArrayList<Integer>();
for (int i=min; i<=max; i++) {
helper(maxCycle, i);
}
return maxCycle;
} public void helper(List<Integer> maxCycle, int num) {
int len = 1;
while (num != 1) {
if (num%2 == 1) num = num*3+1;
else num = num/2;
len++;
}
maxCycle.add(len);
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution2 sol = new Solution2();
List<Integer> res = sol.maxCycleLen(1, 100000);
System.out.println(res);
} }
follow up: 建立一个Lookup table, 算过的数就不算了
package Sorting;
import java.util.*; public class Solution3 {
HashMap<Integer, Integer> map;
public List<Integer> maxCycleLen(int min, int max) {
List<Integer> maxCycle = new ArrayList<Integer>();
map = new HashMap<Integer, Integer>();
for (int i=min; i<=max; i++) {
helper(maxCycle, i);
}
return maxCycle;
} public void helper(List<Integer> maxCycle, int num) {
int len = 0;
int numcopy = num;
while (!map.containsKey(num)) {
if (num == 1) {
map.put(1, 1);
maxCycle.add(1);
return;
}
if (num%2 == 1) num = num*3+1;
else num = num/2;
len++;
}
len = len + map.get(num);
maxCycle.add(len);
map.put(numcopy, len);
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution3 sol = new Solution3();
List<Integer> res = sol.maxCycleLen(1, 100000);
System.out.println(res);
} }
Groupon面经Prepare: Max Cycle Length的更多相关文章
- 数据库操作提示:Specified key was too long; max key length is 767 bytes
操作重现: 法1:新建连接——>新建数据库——>右键数据库导入脚本——>提示:Specified key was too long; max key length is 767 by ...
- Mysql Specified key was too long; max key length is 767 bytes
今天导入一个数据库时,看到以下报错信息: Specified key was too bytes 直译就是索引键太长,最大为767字节. 查看sql库表文件,发现有一列定义如下: 列 名:cont ...
- Specified key was too long; max key length is 767 bytes mysql
Specified key was too long; max key length is 767 bytes 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...
- Using innodb_large_prefix to avoid ERROR #1071,Specified key was too long; max key length is 1000 bytes
Using innodb_large_prefix to avoid ERROR 1071 单列索引限制上面有提到单列索引限制767,起因是256×3-1.这个3是字符最大占用空间(ut ...
- EF MySQL 提示 Specified key was too long; max key length is 767 bytes错误
在用EF的CodeFirst操作MySql时,提示 Specified key was too long; max key length is 767 bytes错误,但数据库和表也建成功了.有高人知 ...
- Specified key was too long; max key length is 767 b
alter table - engine=innodb,row_format=dynamic; Specified key was too long; max key length is 767 b
- MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法
MySQL错误"Specified key was too long; max key length is 1000 bytes"的解决办法 经过查询才知道,是Mysql的字段设置 ...
- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
今天在MySQL 5.6版本的数据库中修改InnoDB表字段长度时遇到了"ERROR 1071 (42000): Specified key was too long; max key le ...
- Specified key was too long; max key length is 767 bytes解决方案
问题描述: 1. 使用spark sql处理数据逻辑,逻辑处理后使用 df.write.mode(saveMode).jdbc(url, tableName, connectionPropertie ...
随机推荐
- LVS的DR模式配置
一.基本规划负载均衡调度器 192.168.1.104 默认网关 192.168.1.1 ip别名 192.168.1.233realserver1 192.168 ...
- 时间函数 date strtotime
date_default_timezone_set('Asia/Shanghai');echo strtotime('Today');echo strtotime(date('Y-m-d')); 获取 ...
- MyEclipse8.5 以debug模式启动tomcat6.0服务器 报错cannot connect to vm。
打开MyEclipse8.5 想以debug模式启动tomcat6.0服务器,报 a configuration error occurred during startup.please verif ...
- 自动adsl拨号上网
@echo offmode con cols=35 lines=6 & color 5Btitle 开机连接宽带--设置工具 QQ1009693258echo 请稍候...VER|FIND & ...
- HTML5的新事件
HTML 元素可拥有事件属性,这些属性在浏览器中触发行为,比如当用户单击一个 HTML 元素时启动一段 JavaScript. HTML 元素可拥有事件属性,这些属性在浏览器中触发行为,比如当用户单击 ...
- SimpleUrlHandlerMapping 使用
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 在VC6.0中编译头文件时产生moc文件
1.在FileView视图中 右键点击需要产生moc文件的头文件(就是类中包含Q_OBJECT宏,如果没有这个宏就不需要产生moc文件) 2.在右键菜单中选择Setting... 3.选择Custom ...
- Eclipse插件项目 引用其他类库的方法(jar)
这两天搞了个Eclipse插件项目,用来监测ios.android设备和电脑的连接,安装apk/ipa到对应设备等等功能. 遇到了build path下的library引入编译正常,运行时报Class ...
- Suricata配置文件说明
本系列文章是Suricata官方文档的翻译加上自己对其的理解,部分图片也是来自那篇文章,当然由于初学,很多方面的理解不够透彻,随着深入后面会对本文进行一定的修正和完善. Suricata使用Yaml作 ...
- 如何对抗 WhatsApp「蓝色双勾」-- 3 个方法让你偷偷看讯息
WhatsApp 强制推出新功能「蓝色双勾 (✔✔)」 ,让对方知道你已经看过讯息.一众用户反应极大,因为以后不能再藉口说未看到讯息而不回覆.究竟以后 WhatsApp 是否真的「更难用」? 幸好还有 ...