关注
显然这个算法的复杂度太糟糕了,每移动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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
18469次浏览 315人参与
# 硬件人你反向读研了吗 #
39685次浏览 608人参与
# 京东TGT #
26576次浏览 151人参与
# 硬件人秋招的第一个offer #
65471次浏览 1081人参与
# 滴滴工作体验 #
23144次浏览 123人参与
# 非技术岗投递进展 #
137520次浏览 1222人参与
# 材料进Fab厂真的劝退吗? #
35966次浏览 158人参与
# 不考虑转正,实习多久合适 #
23979次浏览 118人参与
# 机械求职避坑tips #
40951次浏览 355人参与
# 互联网回暖,腾讯要招5000+人! #
263494次浏览 4889人参与
# 面试经验谈 #
12057次浏览 183人参与
# 机械只有转码才有出路吗? #
125861次浏览 1590人参与
# 职场新人生存指南 #
331575次浏览 7113人参与
# 面试吐槽bot #
2411次浏览 29人参与
# 异地恋该为对方跳槽吗 #
22948次浏览 118人参与
# 硬件人更看重稳定还是高薪 #
38129次浏览 202人参与
# vivo求职进展汇总 #
208595次浏览 1341人参与
# 25届如何提前做秋招准备? #
163900次浏览 2451人参与
# 你遇到过哪些神仙同事 #
69249次浏览 623人参与
# 租房找室友 #
27305次浏览 143人参与
# 深信服求职进展汇总 #
188644次浏览 1694人参与