亚马逊2014在线面试第一题
来源:互联网 发布:java二叉树遍历 编辑:程序博客网 时间:2024/04/29 10:29
package algorithm;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; /** * Class Name: zhipai.java * Description: 规则一:四张牌相同。自然数字大的胜出,比如3,3,3,3 < 6,6,6,6规则二:四张牌连续。当然序列最大的那个胜出。但是有个小trick,A在这里默认表最大牌,但是如果后接2,3,4,则A表最小牌,为了获得连续序列比如A,2,3,4 < J,Q,K,A规则三:有三张相同。以每个序列相同牌较大的胜出。比如3,3,3,2>2,2,2,A规则四:两个对子。当然以对子较大的胜出,最大的对子相同,则以次大的对子较大者胜出。比如4,4,3,3 > 4,2,4,2规则五:一个对子。对子较大者胜出,如果对子相同,则比较剩下较大牌,如果还相同,比较次大牌3,3,7,4 < 3,3,7,5规则六:如果以上皆不满足,则按照大牌>小牌比较(即从最大牌开始比较,分出高下为止) * @author liuwei DateTime 2014-10-13 上午9:42:08 * @company bvit * @email liu.wei@bvit.com.cn * @version 2.0 */public class zhipai { /** * Description: * 1.判断所在级别 * 2.低级别大于高级别 * 3.级别相同 * @author liuwei DateTime 2014-10-10 下午5:25:39 * @param str1 * @param str2 * @return */public static int compare(String[] str1 ,String[] str2){int lev1 = getLevel(changeStr(str1));System.out.println(lev1);int lev2 = getLevel(changeStr(str2));System.out.println(lev2);if(lev1<lev2){return 1;}else if(lev1>lev2){return -1;}else{int[] array1 = changeStr(str1);int[] array2 = changeStr(str2);if(lev1==3||lev1==5){ array1 = sort(array1); array2 = sort(array2);}for(int i:array1){System.out.print(i+" ");}System.out.println();for(int i:array2){System.out.print(i+" ");}System.out.println();for(int i=0;i<4;i++){if(array1[i]>array2[i]){return 1;}else if(array1[i]<array2[i]){return -1;}else if(array1[i]==array2[i] && i==3){return 0;}}}return 0 ;} /** * Description:判断所属级别 * 1.炸弹 * 2.顺子 * 3.三张 * 4.双对 * 5.一对 * 6.单张 * @author liuwei DateTime 2014-10-10 下午5:39:47 * @param intArray * @return */public static int getLevel(int[] intArray){Map<Integer ,Integer> map = new HashMap<Integer, Integer>();for(int i:intArray){if(map.keySet().contains(i)){map.put(i, map.get(i)+1);}else{map.put(i, 1);}}if(map.containsValue(4))//炸弹return 1;else if(map.containsValue(3))//三张return 3;else if(map.containsValue(2)&& map.keySet().size()==2)//两对return 4;else if(map.containsValue(2)&& map.keySet().size()!=2)//两对return 5;else if(map.containsValue(1)&& (intArray[0]+1==intArray[1] && intArray[1]+1==intArray[2] && intArray[2]+1==intArray[3] )||(2==intArray[0] &&3==intArray[1] && 4==intArray[2] && 14==intArray[3] ))//顺子return 2;elsereturn 6;} /** * Description:数字相同的排在前面,其余从大到小排列 * @author liuwei DateTime 2014-10-11 下午2:56:52 * @param intArray * @return */private static int[] sort(int[] intArray){Map<Integer ,Integer> map = new HashMap<Integer, Integer>();for(int i:intArray){if(map.keySet().contains(i)){map.put(i, map.get(i)+1);}else{map.put(i, 1);}} map = MapUtil.sortByValue(map); int[] newArray = new int[4];Set<Integer> set =map.keySet();int loc =0;for(Iterator<Integer> iter = set.iterator();iter.hasNext();){int key =iter.next();int value =map.get(key);if(value > 1){for(int i=0;i<value;i++){newArray[i] = key;loc++;}}else{newArray[loc] =key;loc++;}}//判断顺序是否正确for(int i=3;i>1;i--){if(newArray[i]>newArray[i-1] && newArray[i-1]!=newArray[i-2]){int temp = newArray[i];newArray[i] = newArray[i-1];newArray[i-1] = temp;}}return newArray;} /** * Description:将AKQJ转化成数字 * @author liuwei DateTime 2014-10-13 上午9:35:15 * @param str * @return */public static int[] changeStr(String[] str){int[] intArray = new int[4];for(int i=0;i<str.length;i++){switch(str[i]){ case "A": if(Arrays.asList(str).contains("A")&&Arrays.asList(str).contains("2")&& Arrays.asList(str).contains("3")&&Arrays.asList(str).contains("4")){ intArray[i]=1; }else intArray[i]=14; break; case "K": intArray[i]=13; break; case "Q":intArray[i]=12; break; case "J":intArray[i]=11; break; default:intArray[i]=Integer.parseInt(str[i]); break;}}Arrays.sort(intArray);int[] newArray = new int[4];for(int i=0;i<4;i++){newArray[i] = intArray[3-i];}return newArray;}public static void main(String[] args) {String[] str1 = {"4","4","3","5"};String[] str2 = {"4","3","5","5"};switch(compare(str1,str2)){case 1:System.out.println("1大");break;case -1:System.out.println("2大");break;case 0:System.out.println("平局");break;}}}
package algorithm;import java.util.Collections;import java.util.Comparator;import java.util.LinkedHashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;public class MapUtil{ public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue( Map<K, V> map ) { List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>( map.entrySet() ); Collections.sort( list, new Comparator<Map.Entry<K, V>>() { public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 ) {// return (o1.getValue()).compareTo( o2.getValue() );//从小大大 return (o2.getValue()).compareTo( o1.getValue() );//从大到小 } } ); Map<K, V> result = new LinkedHashMap<K, V>(); for (Map.Entry<K, V> entry : list) { result.put( entry.getKey(), entry.getValue() ); } return result; }}
1 0
- 亚马逊2014在线面试第一题
- 2014 亚马逊在线笔试
- 亚马逊2013的一道在线笔试题
- Practice-3 亚马逊在线测评题
- Amazon(亚马逊)2014届秋季校园招聘在线笔试题一
- 亚马逊 在线笔试 2014-10-9 比较扑克牌序列
- 【面试题】2013亚马逊校园招聘--在线笔试题
- 2013亚马逊校园招聘在线笔试题MM-Chess
- 亚马逊在线笔试题:SpecialSubstring和elimination game
- 亚马逊面试题目1
- 亚马逊面试被拒
- 2013亚马逊在线笔试题目
- 昨天面试第一题
- 微软2014在线笔试第一题 简便易懂算法
- 微软2014在线编程一小时活动第一题
- 微软面试第一题 -先疯盗骨
- 记 dotamax 面试第一题
- 亚马逊在线笔试第三题--(变种的)三叉树的最近公共祖先问题
- I/O多路复用之epoll
- 解析格式为纯字符串的MAP封装起来的XML:(1)
- TI CCS3.3 编译时显示 “nonstandard type for a bit field” 警告信息
- 深入mysql存储过程中表名使用参数传入的详解
- VC++中debug跟release编译模式的区别总结
- 亚马逊2014在线面试第一题
- Socket描述符选项[SOL_SOCKET]
- whereis, locate, find su 和sudo的区别
- cocos2dx
- java操作mongodb
- Java编程的简单的乘法口诀
- Path Sum
- java实例化对象的过程(转自:http://wotahouse.blogbus.com/)
- Oracle里Instance Recovery的终点【重】