关注
我把这个算法称为找♂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-03 18:35
广东工业大学 golang 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 脱下孔乙己长衫,浅聊一下就业下沉!1.8W
- 2... 任何人都可以复刻的AI修改简历思路1.3W
- 3... 腾讯PCG QQ后台开发一面1.1W
- 4... 【未来准备7】就业下沉时代,如何摆脱困境1.1W
- 5... HR面全百科——缺点/不足/有什么要改进的1.0W
- 6... 快手产品运营一面😏凉了也赚了8011
- 7... 【职场生存术6】寻求帮助是一项高级技能,得慢慢学7691
- 8... 实习生记住:你是去工作的,不是去受气的!7017
- 9... 阿里云暑期实习java后端面经6141
- 10... 从双非院校一路 “杀” 进大厂,我是怎么做到的5898
正在热议
更多
# 滴滴求职进展汇总 #
108053次浏览 869人参与
# 穿越回大一,你会做什么 #
16378次浏览 191人参与
# 水滴春招 #
38529次浏览 602人参与
# 听劝,这个简历怎么改 #
27299次浏览 342人参与
# 你见过最离谱的招聘要求是什么? #
153270次浏览 973人参与
# 机械人你知道哪些单休企业 #
6218次浏览 101人参与
# 面试被问“你的缺点是什么?”怎么答 #
16928次浏览 303人参与
# 你想留在一线还是回老家? #
18290次浏览 294人参与
# 机械人求职现状 #
10724次浏览 109人参与
# 互联网行业现在还值得去吗 #
2783次浏览 24人参与
# 租房找室友 #
8983次浏览 59人参与
# 入职第四天,心情怎么样 #
13863次浏览 115人参与
# 第一份工作应该选高薪还是热爱? #
13259次浏览 129人参与
# 你觉得机械有必要实习吗 #
33830次浏览 320人参与
# 面试等了一周没回复,还有戏吗 #
93931次浏览 857人参与
# Offer比较,你最看重什么? #
129189次浏览 844人参与
# 面试被问第一学历差时该怎么回答 #
98265次浏览 618人参与
# 职场新人生存指南 #
202725次浏览 5616人参与
# 初创公司值得加入吗? #
11008次浏览 58人参与
# 选了这个offer,你有没有后悔? #
475250次浏览 3438人参与
# 工作中,你有没有遇到非常爱骂人的领导? #
14002次浏览 115人参与