Java实现double数组首尾交替输出的问题求助
首尾交替输出数组元素的实现方案
嘿,这个首尾交替取元素的需求很常见,我给你分享个最直观高效的双指针法,不管数组长度是奇数还是偶数都能完美适配,时间复杂度是O(n),处理起来特别顺手~
核心思路
用两个指针分别锚定数组的开头(left)和结尾(right):
- 先取
left位置的元素,然后left指针右移一位 - 再取
right位置的元素,然后right指针左移一位 - 重复上述步骤,直到
left超过right时停止 - 注意:当数组长度为奇数时,最后会剩下中间一个元素,这时候只需要单独添加它,不用再取右指针的元素
Java代码实现
public class AlternateArrayPrinter { public static void main(String[] args) { // 初始化目标double数组 double[] nums = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; int left = 0; int right = nums.length - 1; // 用StringBuilder拼接字符串,避免频繁创建对象 StringBuilder output = new StringBuilder(); while (left <= right) { // 添加左指针指向的元素,格式化为整数样式 output.append(String.format("%.0f", nums[left])); left++; // 如果左右指针还没重合,继续添加右指针元素 if (left <= right) { output.append(", "); output.append(String.format("%.0f", nums[right])); right--; // 不是最后一组元素的话,添加分隔逗号 if (left <= right) { output.append(", "); } } } // 输出结果:1, 7, 2, 6, 3, 5, 4 System.out.println(output.toString()); } }
C++代码实现
如果是用C++开发,逻辑完全通用:
#include <iostream> #include <vector> #include <sstream> using namespace std; int main() { vector<double> nums = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; int left = 0; int right = nums.size() - 1; stringstream output; while (left <= right) { // 添加左元素,格式化为整数 output << (int)nums[left]; left++; if (left <= right) { output << ", "; output << (int)nums[right]; right--; if (left <= right) { output << ", "; } } } // 输出结果:1, 7, 2, 6, 3, 5, 4 cout << output.str() << endl; return 0; }
额外小贴士
- 代码里特意做了格式处理,把double类型的
1.0转换成了整数样式的1,完美匹配你要的输出格式 - 如果数组是空的,可以加个简单的判断(比如
if (nums.length == 0))避免索引越界,让代码更健壮
内容的提问来源于stack exchange,提问作者moomin
相关产品推荐
相关产品推荐

