Java实现数组非负元素与后续r个元素求和函数求助
问题:实现指定逻辑的数组处理函数
需求说明
需要实现一个函数sortedlist,接收整数数组l和整数r,返回一个新数组。新数组的生成规则:
- 原数组中非负元素,需要将其与后续最多
r个元素相加(不能超出数组范围),用这个和替换原位置的值; - 原数组中的负数保持不变。
举个具体例子:
原数组 l = {1, 2, -3, 4, 5, 4},r = 3
处理逻辑:
- l[0](非负):累加自身+后续3个元素,即1+2+(-3)+4 = 4
- l[1](非负):累加自身+后续3个元素,即2+(-3)+4+5 = 8
- l[2](负数):不处理,保持-3
- l[3](非负):累加自身+后续最多3个元素(数组只剩2个后续元素),即4+5+4 = 13
- l[4](非负):累加自身+后续最多3个元素(只剩1个后续元素),即5+4 = 9
- l[5](非负):无后续元素,保持4
处理后结果:{4, 8, -3, 13, 9, 4}
现有未完成代码
public class Practice2 { public static void sortedlist(int[] l, int r) { int[] A; int sum = 0; for (int i = 0; i < l.length + r; i+=r) { sum = sum += } } }
代码实现与逻辑说明
完整代码
public class Practice2 { // 修改返回值类型为int[],满足返回新数组的需求 public static int[] sortedlist(int[] l, int r) { // 初始化新数组,长度与原数组一致 int[] A = new int[l.length]; // 遍历原数组每个元素 for (int i = 0; i < l.length; i++) { // 负数直接复制到新数组,跳过求和逻辑 if (l[i] < 0) { A[i] = l[i]; continue; } // 非负元素计算累加和 int sum = 0; // 从当前索引i开始,最多取r+1个元素(自身+后续r个),不超出数组边界 for (int j = i; j <= i + r && j < l.length; j++) { sum += l[j]; } // 将计算结果存入新数组对应位置 A[i] = sum; } return A; } // 测试用例 public static void main(String[] args) { int[] l = {1, 2, -3, 4, 5, 4}; int r = 3; int[] result = sortedlist(l, r); // 输出结果:4 8 -3 13 9 4 for (int num : result) { System.out.print(num + " "); } } }
逻辑说明
- 数组初始化:创建和原数组长度相同的新数组
A,避免修改原数组,符合返回新数组的要求。 - 逐个元素处理:遍历原数组的每个索引
i:- 若当前元素为负数,直接复制到新数组对应位置,跳过后续计算。
- 若为非负元素,初始化累加和
sum,从i开始遍历到i+r(但不能超过数组最后一个索引l.length-1),将范围内的元素累加到sum中。
- 结果返回:将计算好的
sum存入新数组A的对应位置,遍历完成后返回A。
内容的提问来源于stack exchange,提问作者Nutnicha
相关产品推荐
相关产品推荐

