| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1751 人关注过本帖
标题:迭代器中(vector<int>::iterator it)有it->start吗?
只看楼主 加入收藏
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
结帖率:82.35%
收藏
已结贴  问题点数:20 回复次数:4 
迭代器中(vector<int>::iterator it)有it->start吗?
做算法题:合并间隔。答案中有个it->start,我没查到迭代器中有start的操作,是伪代码还是我真的没找到,
想想最可能是作者自己定义操作,那么要如何实现呢,求解答。
#include<iostream>
#include<vector>
using namespace std;
void insert(vector<vector<int> > &intervals,vector<int> newInterval);
vector<vector<int> > merge(vector<vector<int> > intervals)
{
    vector<vector<int> > result;
    for(int i=0;i<intervals.size();i++)
        insert(result,intervals[i]);
    return result;
}
void insert(vector<vector<int> > &intervals,vector<int> newInterval)
{
    vector<vector<int> >::iterator it =intervals.begin();
    while(it!=intervals.end())
    {
        if(newInterval.end()<it->start)
        {
            intervals.insert(it,newInterval);
            return ;
        }
        else if(newInterval.start> it->end)
        {
            it++;
            continue;
        }
        else
        {
            newInterval.start=min(newInterval.start,it->start);
            newInterval.end=max(newInterval.end,it->end);
            it=intervals.erase(it);
        }
    }
    intervals.insert(intervals.end(),newInterval);
}
int main()
{
    int a[][2]={{1,3},{6,7},{8,11},{7,10}};
    vector<vector<int> > aa;
    aa.resize(sizeof(a)/sizeof(a[0]));
    for(int i=0;i<aa.size();i++)
        aa[i].resize(2);
    for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
    {
        aa[i][0]=a[i][0];
        aa[i][1]=a[i][1];
    }
    vector<vector<int> > result=merge(aa);
    for(int i=0;i<result.size();i++)
    {

        cout<<"{"<<result[i][0]<<","<<result[i][1]<<"}"<<" ";
    }
    cout<<endl;
    return 0;
}

搜索更多相关主题的帖子: vector int start result end 
2018-02-24 15:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
把题目要求贴出来看看

找到了:https://
明天帮你写一个

你也可以看看LeetCode定义的是
/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
        
    }
};


[此贴子已经被作者于2018-2-24 16:23编辑过]

2018-02-24 16:17
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
收藏
得分:0 
回复 2楼 rjsp
谢谢,原来是leetcode上的题。恍然大悟~
2018-02-24 17:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

vector<pair<int,int>> intervals_merge( const vector<pair<int,int>>& old_intervals, pair<int,int> new_interval )
{
    auto[itor_a,itor_b] = equal_range( begin(old_intervals), end(old_intervals), new_interval, [](const auto& a,const auto& b){return a.second<b.first;} );
    for( auto itor=itor_a; itor!=itor_b; ++itor )
    {
        new_interval.first = min( new_interval.first, itor->first );
        new_interval.second = max( new_interval.second, itor->second );
    }

    vector<pair<int,int>> ret;
    ret.reserve( distance(old_intervals.begin(),itor_a) + 1 + distance(itor_b,old_intervals.end()) );
    ret.insert( ret.end(), old_intervals.begin(), itor_a );
    ret.insert( ret.end(), new_interval );
    ret.insert( ret.end(), itor_b, old_intervals.end() );
    return ret;
}

int main( void )
{
    {
        auto new_intervals = intervals_merge( {{1,3},{6,9}}, {2,5} );
        for( const auto& item : new_intervals ) // {1,5},{6,9}
            cout << '{' << item.first << ',' << item.second << '}';
        cout << endl;
    }
    {
        auto new_intervals = intervals_merge( {{1,2},{3,5},{6,7},{8,10},{12,16}}, {4,9} );
        for( const auto& item : new_intervals ) // {1,2},{3,10},{12,16}
            cout << '{' << item.first << ',' << item.second << '}';
        cout << endl;
    }
}
2018-02-26 09:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
还可以继续优化掉一个for循环
程序代码:
vector<pair<int,int>> intervals_merge( const vector<pair<int,int>>& old_intervals, pair<int,int> new_interval )
{
    auto[itor_a,itor_b] = equal_range( begin(old_intervals), end(old_intervals), new_interval, [](const auto& a,const auto& b){return a.second<b.first;} );
    if( itor_a != itor_b )
    {
        new_interval.first = min( new_interval.first, itor_a->first );
        new_interval.second = max( new_interval.second, prev(itor_b)->second );
    }

    vector<pair<int,int>> ret;
    ret.reserve( distance(old_intervals.begin(),itor_a) + 1 + distance(itor_b,old_intervals.end()) );
    ret.insert( ret.end(), old_intervals.begin(), itor_a );
    ret.insert( ret.end(), new_interval );
    ret.insert( ret.end(), itor_b, old_intervals.end() );
    return ret;
}

2018-02-27 08:24
快速回复:迭代器中(vector<int>::iterator it)有it->start吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029479 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved