leetcode——406.根据身高重建队列

### 解题思路

脑阔疼,思路很快就想到了,但是在写代码时不是遗漏了这个,就是忘写了那个,debug花了好久。

首先排序,优先按照身高升序排序,如果身高相同,按照人数(第二列)升序排序。

从最后一个人开始下手,向前遍历。

如果people[i][1]为0或者k,如果前面正好有k个和people[i][1]同样高的人,则不用处理,直接跳过,如果k比前面与people[i][1]同样高的人的数量(n)多,则k-n,得到people[i][1]还需要有k-n个比他高的人。

所以,将people[i][1]后的k-n个人依次向前移一位,而people[i][1]则放到i+k-n的位置。

vector<vector<int> > reconstructQueue(vector<vector<int> >& people) {
		int s=people.size(),t=0,m=0,n=0;
	//	sort(people.begin(),people.end(),cmp);
	    sort(people.begin(),people.end());//默认按照数组第一列升序排序,如果第一列相同,按照第二列升序排序 
		for(int i=s-2;i>=0;i--){
			t=people[i][1];
			m=people[i][0];
			n=0;
			for(int k=0;k<i;k++){
				if(people[k][0]==people[i][0]) n++;
			}
			for(int j=0;j<t-n;j++){
				people[i+j][0]=people[i+j+1][0];
				people[i+j][1]=people[i+j+1][1];
			}
			people[i+t-n][0]=m;
			people[i+t-n][1]=t;
		}
		return people;
    }
    
int main(){
	vector<vector<int> > people(6);//vector二维数组初始化方法
	vector<int> peo;
	int value;
	for(int i=0;i<6;i++)
		for(int j=0;j<2;j++){
			cin>>value;
			people[i].push_back(value);
		}
	reconstructQueue(people);
	for(int i=0;i<6;i++)
		for(int j=0;j<2;j++){
			cout<<people[i][j]<<" ";
		}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值