Here is another codility problem solution from the codility lessons (EquiLeader -Find the index S such that the leaders of the sequences A[0], A[1], ..., A[S] and A[S + 1], A[S + 2], ..., A[N - 1] are the same.
) due to the copy rights I can't copy the content of the problem here so to view the problem description click here.
// you can also use imports, for example: // import java.util.*; // you can use System.out.println for debugging purposes, e.g. // System.out.println("this is a debug message"); class Solution { public int solution(int[] A) { // write your code in Java SE 8 Integer[] equi = findEquiLeader(A); if (equi == null) return 0; else { int equiLeader = equi[0]; int count = equi[1]; int startCount = 0; int equileaderCount = 0; for (int i = 0; i < A.length; i++) { if (A[i] == equiLeader) startCount++; if (startCount > (i + 1) / 2 && (count - startCount) > (A.length - (i + 1)) / 2) { equileaderCount++; } } return equileaderCount; } } private Integer[] findEquiLeader(int[] A) { int len = A.length; int size = 0; Integer value = null; for (int i = 0; i < A.length; i++) { if (size == 0) { value = A[i]; size++; } else { if (value == A[i]) { size++; } else { size--; } } } if (size > 0) { int count = 0; for (int i: A) { if (i == value) count++; } if (count > A.length / 2) { return new Integer[] { value, count }; } } return null; } } ///Using Hashmap class Solution { public int solution(int[] A) { // write your code in Java SE 8 HashMap< Integer,Integer> hm = new HashMap(); for( int i: A) { if(hm.containsKey(i)) hm.put(i,hm.get(i)+1); else hm.put(i,1); } int maxNum=0; int maxCount=0; for(int j: hm.keySet()) { int currentCount=hm.get(j); if(maxCount< currentCount) { maxCount=currentCount; maxNum=j; } } //System.out.println(maxCount+" "+maxNum); int countOfMax=maxCount; int firstPart=0; int equiLeader=0; for(int i =0;i< A.length-1;i++) { if(A[i]==maxNum) { countOfMax--; firstPart++; } if((A.length-(i+1))/2< countOfMax&&(i+1)/2< firstPart) { equiLeader++; } } return equiLeader; } }
No comments:
Post a Comment