最近开始在看《编程之美》着本书籍,这里把书中的算法在这里再次记录一下,加深一下印象^_^。
题目:写一个函数,返回数组中所有元素被第一个元素整除的结果。
代码如下(不唯一):
@Test
public void testDivArray() {
int[] array = {2, 1, 4, 6, 8, 5};
printArray(array);
divArray(array);
printArray(array);
}
/**
* @param array
*/
private void divArray(int [] array) {
if(array == null || array.length == 0) return;
if(array[0] == 0) return;
// 数组中所有元素被第一个元素整除
for (int i = array.length - 1; i >= 0 ; i --) {
array[i] /= array[0];
}
}
private void printArray(int [] array) {
if(array == null) System.out.println("[]");;
System.out.println(Arrays.toString(array));
}
输出结果:
[2, 1, 4, 6, 8, 5]
[2, 0, 2, 3, 4, 2]
书中提到该问题有两个陷阱,这里也简单记录一下:
1、代码中循环是倒着写的,即从最后一个元素开始,那么代码中的循环可以正着写吗?即从第一个元素开始。如果从第一个元素开始遍历整除,循环第一步后第一个元素就变为1,然后再用它去除以其他元素,就不符合题目要求。
2.检查除数为零的情况。