蘑菇街笔试题总结
来源:互联网 发布:电脑桌面课程表软件 编辑:程序博客网 时间:2024/04/29 23:10
修理桌子
Arthur最近搬到了新的别墅,别墅特别大,原先的桌子显得比较小,所以他决定换一张新的桌子。他买了一张特别大的桌子,桌子是由很多条桌腿进行支撑的,可是回到家之后他发现桌子不稳,原来是桌子腿长度不太相同。他想要自己把桌子修理好,所以他决定移除掉一些桌腿来让桌子变得平稳。桌子腿总共有n条腿,第i条腿长度为li,Arthur移除第i桌腿要花费代价为di。假设k条腿桌子平稳的条件:超过一半桌腿能够达到桌腿长度的最大值。例如:一条腿的桌子是平稳的,两条腿的桌子腿一样长时是平稳的。请你帮Arthur计算一下是桌子变平稳的最小总代价。
import java.util.HashMap;import java.util.Map;import java.util.Scanner;import java.util.Set;import java.util.TreeSet;public class Main { public void sortNum(int[] l,int[] d,int begin,int end){ int i=begin,j=end; int templ=l[begin],tempd=d[begin]; while(i<j){ while(i<j&&d[j]>=tempd) j--; if(i<j){ l[i]=l[j]; d[i]=d[j]; } while(i<j&&d[i]<=tempd) i++; if(i<j){ l[j]=l[i]; d[j]=d[i]; } } l[i]=templ; d[i]=tempd; if(begin<i-1) sortNum(l,d,begin,i-1); if(end>i+1) sortNum(l,d,i+1,end); } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); while(scan.hasNextInt()){ int n=scan.nextInt(); int[] l=new int[n]; int[] d=new int[n]; Set<Integer> set=new TreeSet<Integer>(); Map<Integer,Integer> map=new HashMap<Integer,Integer>(); int sum=0,count=0,min=0; for(int i=0;i<n;i++){ l[i]=scan.nextInt(); set.add(l[i]); if(map.get(l[i])==null) map.put(l[i],0); else map.put(l[i],map.get(l[i])+1); } for(int i=0;i<n;i++){ d[i]=scan.nextInt(); sum+=d[i]; } new Main().sortNum(l, d, 0, n-1); min=sum; for(int num:set){ count=sum; int c=map.get(num)-1; for(int i=n-1;i>=0;i--){ if(l[i]==num) count=count-d[i]; if(c>=0&&l[i]<num){ count-=d[i]; c--;} } if(count<min) min=count; } System.out.println(min); } }}
特殊交换
现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。
import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int count=0; while(scan.hasNext()){ int n=scan.nextInt(); int[] l=new int[n]; count=0; for(int i=0;i<n;i++){ l[i]=scan.nextInt(); } int j=0; for(int i=1;i<n;i++){ j=i-1; while(j>=0&&l[j]>l[j+1]){ int temp=l[j]; l[j]=l[j+1]; l[j+1]=temp; j--; count++; } } System.out.println(count); } }}
0 0
- 蘑菇街笔试题总结
- 蘑菇街实习生笔试题
- 蘑菇街笔试题5
- 蘑菇街笔试题1
- 蘑菇街2016实习生笔试面试总结
- 蘑菇街2016招聘在线笔试题
- 笔试题(蘑菇街):最大间隔
- 笔试题(蘑菇街):回文串
- 蘑菇街笔试题 搬圆桌
- 蘑菇街笔试题 最大间隔
- 蘑菇街笔试题 投篮比赛
- 特殊交换(蘑菇街笔试题)
- 【蘑菇街笔试】
- 蘑菇街2016招聘笔试
- 百度笔试题:蘑菇阵
- 蘑菇街三人斗地主随机发牌的笔试题
- 2015蘑菇街实习生笔试题:A+B= M
- 蘑菇街2016暑期实习笔试编程题
- #if、#ifdef、#ifndef的用法和区别
- Java关键字final、static使用总结
- 安卓开发参考资料
- 如何将solidworks模型图转为CAD三视图?-问题解决
- Android-原生系统分享小记
- 蘑菇街笔试题总结
- 数组越界Crash
- Error: need EHLO and AUTH first
- caffe源码阅读7-neuron_layers.hpp+各cpp
- Configuration with name 'default' not found
- poj-2769-Reduced ID Numbers
- SMTPS和SMTP
- win+Apache+mod_wsgi配置mapproxy心得(一)
- Android开发常用的第三方框架