[Codewar练习-java&c++]Twice linear(双线性)

这篇博客介绍了Codewar上的Twice linear问题,涉及汉明数字和N线性算法。文章分析了数组的生成规律,通过二叉树模型解释元素产生过程,并探讨了去重和排序的策略。博主提出了一种优化方法,通过从最小元素开始计算并去重,确保有序性。文章提供了Java和C++的优化代码实现。
摘要由CSDN通过智能技术生成

问题:

段位: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、元素产生,是一个二叉树:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值