如何高效地从整数数组中每次提取3个元素进行累加操作
高效处理数组每3个元素一组的求和问题
你的思路完全没问题,只是需要用循环来自动化处理所有分组,而不是手动写每一组的提取逻辑。这里有几种简洁高效的实现方式:
基础循环实现(适配固定长度数组)
因为你的数组刚好是300个元素(3的整数倍),可以直接用步长为3的for循环,每次定位到每组的起始索引,然后提取该组的三个元素:
int[] dates = new int[300]; // 假设这里已完成文件读取,填充了dates数组 int totalSum = 0; // 用于累加所有组的和,根据你的需求调整 List<Integer> groupSums = new ArrayList<>(); // 如果需要单独保存每组的和 for (int i = 0; i < dates.length; i += 3) { // 提取当前组的三个元素 int num1 = dates[i]; int num2 = dates[i + 1]; int num3 = dates[i + 2]; int currentGroupSum = num1 + num2 + num3; totalSum += currentGroupSum; // 累加总和 groupSums.add(currentGroupSum); // 保存每组结果 // 这里可以添加你需要的其他处理逻辑 }
这种方式的时间复杂度是O(n),遍历一次数组即可,非常高效,而且逻辑清晰易懂。
兼容可变长度数组的鲁棒实现
如果以后数组长度可能不是3的整数倍,可以在内部加一个小循环处理剩余元素,避免数组越界:
int[] dates = new int[300]; // 填充数组逻辑 List<Integer> groupSums = new ArrayList<>(); for (int i = 0; i < dates.length; i += 3) { int currentSum = 0; // 最多处理3个元素,同时避免超出数组边界 for (int j = 0; j < 3 && i + j < dates.length; j++) { currentSum += dates[i + j]; } groupSums.add(currentSum); // 执行你的处理逻辑 }
总结
你一开始手动提取前三个元素的思路是正确的,只是缺少了循环来批量处理后续分组。上面的两种方式都能高效完成需求,第一种更适合你当前固定300个元素的场景,代码更简洁;第二种则更通用,能适配各种长度的数组。
内容的提问来源于stack exchange,提问作者Diante Page
相关产品推荐
相关产品推荐

