代码改变世界

随笔档案-2012年03月

不使用条件判断和比较运算符来比较大小

2012-03-08 15:23 by 会被淹死的鱼, 3375 阅读, 收藏, 编辑
摘要: 平时我们都是使用了比较运算符和条件判断, 来进行数字大小的比较, 但是有一些比较巧妙的方法, 也可以比较大小.查了一些资料, 之后, 发现了三种思路, 设两个数为a和ba - b的结果, 进行移位, 取符号位, 0说明结果是正数, a > b, 1说明结果是负数, a < b(a+b)/2 + |(a-b)/2| 或者 (a+b)/2 - |(a-b)/2| , 前者可以取得较大的值, 后者取得较小的值, 很容易数学上证明分配一个长度为a的数组array[a], 判断array[b]是否越界, 越界在java中会抛出异常下面是用java实现的上述三种方法第一种的代码实现 /** * 阅读全文

给定一组数字, 排列后得到的集合, 去掉重复的数, 求其和

2012-03-06 19:59 by 会被淹死的鱼, 788 阅读, 收藏, 编辑
摘要: 一道算法问题描述:给定一组数字, 排列后得到的集合, 去掉重复的数, 求其和.(15)例如: 313, 133 + 313+331 = 777笔者有两种思路:最直接的想法就是排列出所有的情况, 然后去掉重复的, 求和直接求和, 先求出不考虑出现重复的和, 然后再去掉重复的数的和, 得到不重复的数的和第一种想法是思路简单, 但是需要先排列, 可不可以不排列就得出结果?第二种方式就不需要排列, 分析有重复的情况对于结果的影响在有数重复的时候,例如, 221, 2重复了一次, 就是2出现了两次, 本来6(3!)个排列结果, 但是由于2有两个, 去掉重复后变成了3个, 结果是导致其排列重复了2倍例如, 阅读全文