链家数组排序最小交换次数解法?

提交不了也不知道对不对,你们是怎么做的
全部评论
http://www.dewen.net.cn/q/7967 直接推公式
点赞 回复 分享
发布于 2017-08-19 22:01
先一次遍历统计1的个数,2的个数和3的个数。然后统计本来应该是1的位置然而不是1的个数notone,本来应该是2的位置然而是3的个数cnt23,本来应该是3的位置是2的个数cnt32。结果为notone+max(can23,cnt32)。
点赞 回复 分享
发布于 2017-08-20 10:53
import java.util.Scanner; public class Solution { /** * @param args */ static int sum = 0; public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = in.nextInt(); } int lo = 0; int hi = n - 1; quick(arr, lo, hi); System.out.println(sum); } } public static void quick(int[] arr, int lo, int hi) { if (hi <= lo) { return; } int lt = lo; int i = lo + 1; int gt = hi; int tmp = arr[lo]; while (i <= gt) { if (arr[i] < tmp) { swap(arr, lt++, i++); } else if (arr[i] > tmp) { swap(arr, i, gt--); } else { i++; } } quick(arr, lo, lt - 1); quick(arr, gt + 1, hi); } public static void swap(int[] a, int i, int j) { if (a[i] != a[j]) sum++; int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } 三向切分快排,不知道好不好使
点赞 回复 分享
发布于 2017-08-20 10:39
1中2和2中的1交换,1中的3和3中的1交换,2中的3和3中的2交换,每一次交换count+1; 剩下的就是1 2 3 互换的 ,每一次count+2
点赞 回复 分享
发布于 2017-08-20 10:00
暴力做的,后来写完的,一开始只能过56,后来改了下,也不知道能不能过全部 public class Lianjia3 { private static boolean isTrue(int[] verify,int[] data, int n){ for (int i=0;i<n;++i){ if (verify[i]!=data[i]){ return false; } } return true; } private static void swap(int i,int j,int[] data){ int t=data[i]; data[i]=data[j]; data[j]=t; } private static int ans=Integer.MAX_VALUE; public static void solve(int index,int[] verify,int[] data,int n,int cur){ if (isTrue(verify, data, n)){ ans=Math.min(ans, cur); return; } if (verify[index]==data[index]){ solve(index+1, verify, data, n, cur); return; } int id=-1; for (int j=index+1;j<n;++j){ if(data[j]==verify[index] && verify[j]==data[index]){ id=j; break; } } if(id!=-1){ swap(index, id, data); solve(index+1, verify, data, n, cur+1); } if (id==-1){ for (int j=index+1;j<n;++j){ if(data[j]==verify[index] && verify[j]!=data[j]){ id=j; swap(index, j, data); solve(index+1, verify, data, n, cur+1); swap(index, j, data); } } } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int n=in.nextInt(); int[] data=new int[n]; int oneCount=0; int twoCount=0; int threeCount=0; for (int i=0;i<n;++i){ data[i]=in.nextInt(); if (data[i]==1){ oneCount++; }else if (data[i]==2){ twoCount++; }else{ threeCount++; } } int[] verify=new int[n]; int i=0; for (int j=0;j<oneCount;++j){ verify[i++]=1; } for (int j=0;j<twoCount;++j){ verify[i++]=2; } for (int j=0;j<threeCount;++j){ verify[i++]=3; } solve(0,verify, data, n, 0); System.out.println(ans); in.close(); } }
点赞 回复 分享
发布于 2017-08-19 21:47
一趟3路快排,稍微修改一下就行。
点赞 回复 分享
发布于 2017-08-19 21:46
//89%,不知道哪里有坑。。。 public static void main(String args[]){ Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int[] array = new int[n]; int a = 0,b = 0,result = 0; for(int i = 0 ; i < n ; ++i){ array[i] = cin.nextInt(); if(array[i] == 1) a++; else if(array[i] == 2) b++; } for(int i = 0 ; i < a ; ++i){ if(array[i] != 1) result++; } for(int i = a ; i < a + b ; ++i){ if(array[i] == 3) result++; } System.out.println(result); }
点赞 回复 分享
发布于 2017-08-19 21:36
最后怎么输出啊
点赞 回复 分享
发布于 2017-08-19 21:30
treeset
点赞 回复 分享
发布于 2017-08-19 21:28
直接放到set容器,100%。。 哈哈哈
点赞 回复 分享
发布于 2017-08-19 21:21
过了67%
点赞 回复 分享
发布于 2017-08-19 21:17
插入排序,统计次数
点赞 回复 分享
发布于 2017-08-19 21:10
我怎么没这个题 你说的是去重排序的吗 如果是那个题 我用了TreeSet。。。
点赞 回复 分享
发布于 2017-08-19 21:08

相关推荐

避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务