显示标签为“HashMap”的博文。显示所有博文
显示标签为“HashMap”的博文。显示所有博文

2016年10月3日星期一

Split the Pixel






      public static Map<String,String> map = new HashMap<>();  
      public static String closestColor(String sequence){  
        map.put("000000000000000000000000","White");  
        map.put("111111111111111111111111","Black");  
        map.put("111111110000000000000000","Red");  
        map.put("000000001111111100000000","Green");  
        map.put("000000000000000011111111","Blue");  
        int minDist = Integer.MAX_VALUE;  
        int count = 0;  
        String color="";  
        for(String seq: map.keySet()){  
          int dist = distance(sequence,seq);  
          System.out.println(dist);  
          if(minDist==dist){  
            count++;  
          }  
          if(minDist>dist){  
            minDist = dist;  
            count = 1;  
            color = map.get(seq);  
          }  
        }  
        if(count > 1) return "Ambiguous";  
        return color;    
      }  
      public static int distance(String s1, String s2){  
        int r1 = Integer.parseInt(s1.substring(0,8),2);  
        int g1 = Integer.parseInt(s1.substring(8,16),2);  
        int b1 = Integer.parseInt(s1.substring(16,24),2);  
        int r2 = Integer.parseInt(s2.substring(0,8),2);  
        int g2 = Integer.parseInt(s2.substring(8,16),2);  
        int b2 = Integer.parseInt(s2.substring(16,24),2);  
        return (int)(Math.abs(r1^2-r2^2)+Math.abs(g1^2-g2^2)+Math.abs(b1^2-b2^2));  
      }  

Royal Name

1. 题意:

给你一个list of string,每个string 是由一个firstName 以及一个Roman 数字构成。

eg. Louis X, Louis VIII

Roman数字是1-50 I, V, X, L

返回sorted list : Louis VIII, Louis X

2.算法:

这个题是一个sort 题。 要用一个Comparator实例

 public void sortedRoyalName(String[] names){  
   Arrays.sort(names, (a,b)->{  
     String[] name1 = a.split("//s");  
     String[] name2 = b.split("//s");  
     if(name1[0].equals(name2[0])){  
       return Integer.comare(romanToInt(name1[1]),romanToInt(name1[1]));   
     }  
     return name1[0].compareTo(name2[0]);  
   });  
 }  
 public int romanToInt(String s) {  
      int ans = 0;  
     HashMap<String,Integer> RomanToIntMap = new HashMap<>();  
     RomanToIntMap.put("I",1);  
     RomanToIntMap.put("V",5);  
     RomanToIntMap.put("X",10);  
     RomanToIntMap.put("L",50);  
     RomanToIntMap.put("C",100);  
     RomanToIntMap.put("C",100);  
     RomanToIntMap.put("D",500);  
     RomanToIntMap.put("M",1000);  
     int i = 0;  
     while(i < s.length()){  
       if(i!= s.length()-1 && RomanToIntMap.get(s.substring(i,i+1)) < RomanToIntMap.get(s.substring(i+1,i+2))){  
         ans += RomanToIntMap.get(s.substring(i+1,i+2)) - RomanToIntMap.get(s.substring(i,i+1)) ;  
         i+=2;  
         continue;  
       }  
       ans += RomanToIntMap.get(s.substring(i,i+1));  
       i++;  
     }  
     return ans;  
   }