问题:
段位:4
说明:
假设一个数组 arr,里面的元素是这样的规律:
1、arr[ 0 ] = 1;
2、每一个 arr[ i ] 都存在 2 * arr[ i ] + 1 和 3 * arr[ i ] + 1 的元素在数组里面。
3、arr 是从小到大排序的数组
4、arr 的元素不重复
例子就是: arr = [1, 3, 4, 7, 9, 10, 13, 15, 19, 21, 22, 27, ...] (1 存在 2 * 1 + 1 和 3 * 1 + 1 的元素,3 和 4 也是)
然后输入一个数 n,要求返回 arr 从下标 1 开始的 第 n 个元素值
题目连接:https://www.codewars.com/kata/5672682212c8ecf83e000050
相关算法:
Hamming Numbers(汉明数字):https://blog.csdn.net/qq_28033719/article/details/115953335
N Linear(N线性):https://blog.csdn.net/qq_28033719/article/details/115956290
输入案例:
dbl_linear(10) should return 22 案例的数组数一下刚好第 10 个是 22
我的代码:
因为数组里面有 2 * arr[ i ] + 1 和 3 * arr[ i ] + 1 两种线性的元素存在,并且是 从小到大有序的,首先先看这些元素的产生:
1、元素产生,是一个二叉树: