关注
显然这个算法的复杂度太糟糕了,每移动1个0就放弃了上一次移动变化的所有信息,如同冒泡一样去移动0。现在可以从这个算法上改进。
观察发现,从最高位开始,在第t位遇到的第一个0称为首0,如果遇到00,则无条件变为10,首0向后了一位,如果遇到01,如果想把0->1则至少要找到形如0+x个1+0的结构变为10+x个1,对于n-t+1位已经达到最大,对于t+1位后的0取决于x个1后,如果遇到0,则变成1并让首0向后一位,如果遇到1,则x->x+1
function solution(int arr[],int size){
int t;
for(t=0;t<size;t++){
if(arr[t]!=0) break;
}
for(int i=t;i<size;i++){
if(arr[i]==0){
if(i==size-1) break;
if(arr[i+1]==0){
arr[i]=1;
}else{
int t0=0,tp;
for(int j=i+2;j<size;j++){
if(arr[j]==0){
t0++;
arr[j]=1;
tp=j;
}
}
if(t0!=0){
swap(arr[min(i+t0,j)],arr[i]);
}
break;
}
}
return arr;
}
查看原帖
点赞 评论
相关推荐
12-15 22:41
武汉大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 什么是优秀的实习经历 #
8877次浏览 218人参与
# 实习简历求拷打 #
14320次浏览 167人参与
# 被上班搭子“传染”了哪些习惯 #
5892次浏览 99人参与
# 秋招被挂春招仍然能投的公司 #
7172次浏览 101人参与
# 工作后,你落下了哪些病根 #
14036次浏览 191人参与
# 作业帮求职进展汇总 #
83577次浏览 547人参与
# 外包能不能当跳板? #
54190次浏览 256人参与
# mt对你说过最有启发的一句话 #
37552次浏览 448人参与
# 一起聊美团 #
307359次浏览 1764人参与
# 摸鱼被leader发现了怎么办 #
102544次浏览 651人参与
# 京东开奖 #
631774次浏览 3180人参与
# 投格力的你,拿到offer了吗? #
153073次浏览 817人参与
# 秋招特别不鸣谢 #
16126次浏览 181人参与
# 考研失败就一定是坏事吗? #
201754次浏览 1378人参与
# 选实习,你更看重哪方面? #
14614次浏览 221人参与
# 安克创新求职进展汇总 #
62424次浏览 541人参与
# 京东美团大战,你怎么看? #
158216次浏览 861人参与
# 第一次面试 #
1036676次浏览 13683人参与
# 担心入职之后被发现很菜怎么办 #
266491次浏览 1133人参与
# 你今年的保底offer是哪家 #
155309次浏览 675人参与
查看1道真题和解析