关注
我把这个算法称为找♂0算法,从定义出发的思路:
1:MAX情况,FFFF是最大的二进制数
2:对于任何一个二进制数,比较大小的条件:
a) 如果所有位都相等,那么两个数相等
b) 从左向右两个数间第一个不同的位中,是1的那个数更大
所以,对于两个不同的数,只要最高不同位是1,那么后面的数是多少都无所谓。
因此对数组从左到右循环,找到第一个为0的位,努力让这个位变成1,变成1的方法是:看这个位的后一位是否是0,如果是0则00->10变化成功,如果是1则再看1后是不是0,如果是0则010->001->101变化成功,以此类推,当访问到末尾时还找不到能提供0的对,那么算法无能为力,可以返回了。
以下是pseudocode
bool move(int arr[],int start,int size){
if(start==size) false;
if(arr[start+1]!=0){
move(arr,start+1,size);
}
if(arr[start+1]==0){
arr[start]=!arr[start];
arr[start+1]=!arr[start+1];
return true;
}else return false;
function solution(int arr[],int size)->int []{
for(int i=0;i<size;i++){
if(arr[i]==0){
if(!move(arr,i,size)) break;
}
}
return arr;
}
复杂度分析,最好情况n个0,O(n)遍历得到n-1个1+0,最坏情况0+n-2个1+0->n-2个1+01复杂度是O(n2)
查看原帖
1 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 实习没事做是福还是祸? #
5340次浏览 82人参与
# 应届生进小公司有什么影响吗 #
108346次浏览 1105人参与
# 团建是“福利”还是是 “渡劫” #
2504次浏览 63人参与
# 重来一次,你会对开始求职的自己说 #
1280次浏览 33人参与
# 一人说一个提前实习的好处 #
1767次浏览 27人参与
# OPPO求职进展汇总 #
755610次浏览 5390人参与
# 你小心翼翼的闯过多大的祸? #
5157次浏览 81人参与
# 今年形式下双非本找得到工作吗 #
266023次浏览 1541人参与
# 公司情报交流地 #
127230次浏览 1232人参与
# 实习简历求拷打 #
25692次浏览 255人参与
# 从顶到拉给所有面过的公司评分 #
144530次浏览 516人参与
# 面试尴尬现场 #
209200次浏览 851人参与
# 投格力的你,拿到offer了吗? #
155306次浏览 829人参与
# 正在实习的你,有转正机会吗? #
465907次浏览 3063人参与
# 作业帮求职进展汇总 #
85789次浏览 559人参与
# 携程工作体验 #
18994次浏览 66人参与
# 哪些公司笔/面试难度大? #
7116次浏览 32人参与
# 国庆前的秋招小结 #
266049次浏览 1719人参与
# 找不到实习会影响秋招吗 #
1400269次浏览 13639人参与
# 机械人,签完三方你在忙什么? #
75510次浏览 260人参与
