关注
我把这个算法称为找♂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 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
01-19 09:46
深圳大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
10586次浏览 132人参与
# 你认为工作的意义是什么 #
249191次浏览 1498人参与
# 程序员找工作至少要刷多少题? #
18329次浏览 246人参与
# 为了减少AI幻觉,你注入过哪些设定? #
4535次浏览 147人参与
# 我现在比当时_,你想录用我吗 #
8634次浏览 111人参与
# 机械人避雷的岗位/公司 #
43370次浏览 298人参与
# 一张图晒一下你的AI员工 #
4997次浏览 114人参与
# 论秋招对个人心气的改变 #
10770次浏览 154人参与
# 关于春招/暑期实习,你想知道哪些信息? #
7420次浏览 119人参与
# 刚入职的你踩过哪些坑 #
6783次浏览 127人参与
# AI Coding的使用心得 #
4601次浏览 101人参与
# 晒晒你司的新年福利 #
8415次浏览 105人参与
# 牛客AI体验站 #
6702次浏览 185人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1944次浏览 47人参与
# 柠檬微趣工作体验 #
14769次浏览 83人参与
# 总结:哪家公司面试体验感最差 #
92985次浏览 430人参与
# 程序员能干到多少岁? #
8549次浏览 115人参与
# 你认为小厂实习有用吗? #
118024次浏览 679人参与
# 互联网公司评价 #
485569次浏览 4109人参与
# 应届生进小公司有什么影响吗 #
118270次浏览 1159人参与
