281 锯齿迭代器

本文介绍了一种锯齿形迭代器的实现方法,用于交替返回多个一维向量中的元素。通过实例演示了如何使用该迭代器处理不同长度的向量,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
给出两个一维的向量,请你实现一个迭代器,交替返回它们中间的元素。

示例:
输入:
v1 = [1,2]
v2 = [3,4,5,6]
输出: [1,3,2,4,5,6]
解析: 通过连续调用 next 函数直到 hasNext 函数返回 false,
next 函数返回值的次序应依次为: [1,3,2,4,5,6]。
拓展:假如给你 k 个一维向量呢?你的代码在这种情况下的扩展性又会如何呢?
拓展声明:
“锯齿” 顺序对于 k > 2 的情况定义可能会有些歧义。所以,假如你觉得 “锯齿” 这个表述不妥,也可以认为这是一种 “循环”。例如:
输入:
[1,2,3]
[4,5,6,7]
[8,9]
输出: [1,4,8,2,5,9,3,6,7].

方法1:
主要思路:
(1)直接扩展到 k 个数组的锯齿形迭代器;

class ZigzagIterator {
public:
    int nums;
    int row;
    int col;
    vector<vector<int>> vecs;
    ZigzagIterator(vector<int>& v1, vector<int>& v2) {
        //将数组压入
        vecs.push_back(v1);
        vecs.push_back(v2);
        nums=v1.size()+v2.size();//总的元素的数量
        //找出初始的有效的位置
        for(int i=0;i<vecs.size();++i){
            if(vecs[i].size()){
                row=i;
                break;
            }
        }
       // row=0;
        col=0;
    }

    int next() {
        if(nums==0){
            return -1;
        }
        --nums;
        //返回最后一个结点
        if(nums==0){
            return vecs[row][col];
        }
        //当前要返回的有效的元素
        int res=vecs[row][col];
        //将位置调整到下一个有效元素的位置
        //调整行
        ++row;
        if(row==vecs.size()){
            row=0;
            ++col;
        }
        //调整可能的列
        while(row<vecs.size()&&col>=vecs[row].size()){
            ++row;
            if(row==vecs.size()){
                row=0;
                ++col;
            }
        }
        return res;
    }

    bool hasNext() {
        return nums!=0;//返回是否有剩余的结点
    }
};

/**
 * Your ZigzagIterator object will be instantiated and called as such:
 * ZigzagIterator i(v1, v2);
 * while (i.hasNext()) cout << i.next();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值