Java中基于原数组生成新数组:3的倍数元素加下一个偶数的实现
实现符合需求的数组转换
首先咱们先拆解需求和例子,明确逻辑:从你的例子[1,3,4,6,1]得到[1,7,4,6,1]可以看出,规则是:
- 遍历原数组生成全新数组(不修改原数组)
- 元素不是3的倍数:直接保留原值
- 元素是3的倍数:找到它在数组中后面的第一个偶数元素,将当前元素与这个偶数相加;如果后面没有偶数,就保留原值
下面用Python给出具体实现,逻辑清晰且容易扩展:
步骤1:写一个辅助函数找后续第一个偶数
这个函数负责帮我们定位当前元素之后的第一个偶数,找不到就返回None:
def find_next_even(arr, current_index): # 从当前元素的下一个位置开始遍历 for i in range(current_index + 1, len(arr)): if arr[i] % 2 == 0: return arr[i] # 遍历完后面所有元素都没找到偶数,返回None return None
步骤2:生成转换后的新数组
遍历原数组,对每个元素应用规则:
def transform_array(original_arr): new_array = [] for idx, num in enumerate(original_arr): if num % 3 == 0: # 找当前元素后面的第一个偶数 next_even_num = find_next_even(original_arr, idx) if next_even_num is not None: new_array.append(num + next_even_num) else: new_array.append(num) else: new_array.append(num) return new_array
测试验证
用你的例子测试一下:
a = [1,3,4,6,1] result = transform_array(a) print(result) # 输出:[1,7,4,6,1],完全符合预期
如果是其他语言(比如JavaScript)
这里也给个JS版本的实现,逻辑一样:
function findNextEven(arr, currentIndex) { for (let i = currentIndex + 1; i < arr.length; i++) { if (arr[i] % 2 === 0) { return arr[i]; } } return null; } function transformArray(originalArr) { const newArr = []; for (let idx = 0; idx < originalArr.length; idx++) { const num = originalArr[idx]; if (num % 3 === 0) { const nextEven = findNextEven(originalArr, idx); newArr.push(nextEven !== null ? num + nextEven : num); } else { newArr.push(num); } } return newArr; } // 测试 const a = [1,3,4,6,1]; console.log(transformArray(a)); // 输出:[1,7,4,6,1]
如果我对“下一个偶数”的理解有偏差(比如你指的是数学上大于当前元素的最小偶数,而不是数组后续的元素),可以随时告诉我,我再调整实现~
内容的提问来源于stack exchange,提问作者user9119361
相关产品推荐
相关产品推荐

