zoukankan      html  css  js  c++  java
  • 亚马逊2014在线面试第一题

    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; else return 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; } }




  • 相关阅读:
    程序员年后离职跳槽指南
    程序员年后离职跳槽指南
    程序员为什么会有职业瓶颈?
    程序员为什么会有职业瓶颈?
    年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
    年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
    对于Ping的过程,你真的了解吗?
    对于Ping的过程,你真的了解吗?
    shell解析命令行的过程以及eval命令
    shell的命令替换和命令组合
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7209486.html
Copyright © 2011-2022 走看看