4.8华为笔试第2题,这个解法有问题吗

题目大概意思是:给个二进制串,其中00可以修改为10,10可以修改为01,设计个算法,使修改后的二进制最大
如:输入0001,输出1101
#include<iostream>
#include<vector>
using namespace std; 
void maxchange(vector<int>&v)
{
	for(int i=0;i<v.size()-1;i++)
	{
	    if(v[i]==0) //如果当前v[i]为0,则进行修改操作 
	    {
	    	/*下面代码功能是,找到下一个0,这里有3中情况:
			  1.v[i+1]=0,则修改v[i]=1;
			  2.v[j]=0,j>i+1,且j没超过数组下标,修改v[i]=v[j]=1,v[i+1]=0;
			  3.若j超过数组下标,结束循环,这时说明只剩1个0了**/
			
			int j=i+1;
	    	while(j<v.size()&&v[j]==1) j++;
	    	if(j>=v.size()) break;
	    	else if(j==i+1) v[i]=1;
	    	else
	    	{
	    		v[i]=v[j]=1;
	    		v[i+1]=0;
			}
		}
		//当前为1不用修改,继续 
	}
}
int main()
{
	vector<int>v;
	int n;
	cin>>n;
	cout<<"请输入二进制串,以空格分开:"<<endl;
    for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		v.push_back(x);
	}
	maxchange(v);
	cout<<"------------------------结果--------------------------------"<<endl;
	for(int i=0;i<n;i++) cout<<v[i];
	return 0;
}


#华为笔试##华为##笔试题目#
全部评论
你的思路和我一样,我和很多牛友讨论过,咱们的做法是正确的,标答只考虑010的转换,没有考虑011110这些情况。我也写了个帖子,欢迎留言。
点赞 回复 分享
发布于 2020-04-09 17:54

相关推荐

后端实习中的&nbsp;“好需求”,核心定义是能支撑面试深度讨论、可向外延伸多维度知识点的需求——&nbsp;本质是能让你在面试官拷打时,有足够空间展现技术积累、解决问题的能力,而非仅完成简单&nbsp;CRUD。结合面试反推逻辑,具体可分为三类,且都具备&nbsp;“可延伸、有讨论点”&nbsp;的共性。本质上是这个需求要支撑你能给面试官吹牛逼。典型的垃圾需求:或许有的同学可能还不理解什么叫做可以吹牛逼的需求,我举一个最简单的反例,很多同学写苍穹外卖的时候,总爱把一个需求写到简历上:&nbsp;&nbsp;基于OSS处理用户上传图片,获取OSS返回URL,实现用户远程上传图片。这就是个最典型的垃圾需求。因为你发现论代码链路,他没什么可讲的。论各种新潮技术,他也...
反装笔大队长:分情况吧。需求分业务需求和技术需求,技术需求你说的是对的。像CRM、OA、NC等等,这些业务系统很多时候对技术要求并不高的,不可否认的是 这些需求还是很不错的。 NC系统的进销存。实际上只是对仓库、库位、库存量、入库出库单价、数据报表等数据的统计与计算。CRM的市场活动、人面画像分析与统计、客户信息管理等,这些无非都是一些增删改查。对于业务需求面试官通常都是问你对业务的理解与过往对该业务的处理方案,并不会死磕技术。技术肯定是多多益善,但在业务开发中 正在有意义的是你的经历。
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务