Kotlin如何实现数组相邻奇数两两求和生成目标新数组
问题描述
给定数组 arr = [1,2,3,4,5,6,7,8,9],需要按规则生成新数组:
- 先提取数组内所有奇数
- 将提取后的奇数序列中相邻两个数依次求和,计算对应关系为:
1+3=4、3+5=8、5+7=12、7+9=16 - 最终得到目标数组
newArray = [4,8,12,16]
当前编写的Kotlin代码无法输出正确结果,原代码如下:
fun main(){ val sum = arrayOf(1,2,3,4,5,6,7,8,9) var first =0; var second=0 for (i in sum.indices){ if(sum[i]%2!=0){ first += sum[i] if (second!=0){ println(" $first + $second") first=second } } } }
原代码问题点
- 变量逻辑混乱:
first、second两个临时变量的累加、赋值逻辑不符合需求,没有按顺序缓存相邻的两个奇数 - 没有创建结果容器存储求和值,仅做了逻辑错误的打印操作
- 遍历到奇数时没有正确维护相邻数值的缓存关系,出现了无意义的累加赋值
正确实现方案
实现思路
最清晰的实现分两步:
- 先过滤原数组,拿到所有奇数组成的临时序列
- 遍历奇数序列,从第二个元素开始,每次计算当前元素和前一个元素的和,存入结果数组即可
如果追求遍历效率,也可以在一次遍历中完成,只需要缓存上一个遇到的奇数,遇到下一个奇数时就计算和存入结果,再更新缓存值即可。
可运行代码
写法1(逻辑直观易维护):
fun main() { val originArray = arrayOf(1,2,3,4,5,6,7,8,9) // 过滤得到所有奇数 val oddList = originArray.filter { it % 2 != 0 } val newArray = mutableListOf<Int>() // 遍历相邻元素求和 for (i in 1 until oddList.size) { newArray.add(oddList[i-1] + oddList[i]) } // 验证输出:[4, 8, 12, 16] println(newArray) }
写法2(单次遍历,空间效率更高):
fun main() { val originArray = arrayOf(1,2,3,4,5,6,7,8,9) val newArray = mutableListOf<Int>() var lastOdd: Int? = null // 缓存上一个遍历到的奇数 for (num in originArray) { if (num % 2 != 0) { // 存在上一个奇数缓存时,计算相邻和存入结果 if (lastOdd != null) { newArray.add(lastOdd + num) } // 更新缓存为当前奇数 lastOdd = num } } // 验证输出:[4, 8, 12, 16] println(newArray) }
内容的提问来源于stack exchange,提问作者user19219454
相关产品推荐
相关产品推荐

