如何实现array升序与对应降序索引元素相加生成新数组?
数组对称位求和生成新数组的实现方案
首先明确索引对应规则:
如果使用1基索引,原数组为arr[1]~arr[50],新数组第k位(1≤k≤50)的计算逻辑为arr[51 -k] + arr[k];如果使用编程常用的0基索引,原数组为arr[0]~arr[49],新数组第k位(0≤k≤49)的计算逻辑为arr[49 -k] + arr[k]。
以下是不同场景下的可行实现方案:
通用基础循环实现
全语言通用,逻辑最直观,无任何依赖:
# Python 0基索引示例 original_arr = list(range(1, 51)) # 模拟长度为50的原数组 new_arr = [] arr_len = len(original_arr) for i in range(arr_len): new_arr.append(original_arr[arr_len - 1 - i] + original_arr[i])
- 优势:逻辑清晰易调试,可随时修改运算规则(比如将加法替换为乘法、拼接等其他操作)
- 劣势:代码量稍长,需要手动维护索引计算
内置API简化实现
利用语言自带的数组反转、配对语法精简代码,避免索引计算错误:
# Python 示例 original_arr = list(range(1, 51)) new_arr = [a + b for a, b in zip(reversed(original_arr), original_arr)]
- 优势:代码简洁可读性高,不需要手动计算索引,出错概率低
- 劣势:依赖语言内置的反转、配对API,部分小众编程语言可能无对应实现
性能优化实现
观察规则可知新数组为完全对称结构,第k位与第50-k+1位的计算结果完全一致,可仅计算半段数据完成数组生成:
original_arr = list(range(1, 51)) arr_len = len(original_arr) new_arr = [0] * arr_len # 仅遍历半段即可完成全数组赋值 for i in range((arr_len + 1) // 2): res = original_arr[arr_len - 1 - i] + original_arr[i] new_arr[i] = res new_arr[arr_len - 1 - i] = res
- 优势:计算量减少一半,适合超大数组的性能优化场景
- 劣势:仅适用于对称运算场景,若后续需要修改为非对称运算需要完全重构
内容的提问来源于stack exchange,提问作者A Mohamed Sakeel
相关产品推荐
相关产品推荐

