Advertisement
War_Paz

Elemento majoritário em uma Pilha (Stack/Deque)

Mar 3rd, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.11 KB | None | 0 0
  1. /*
  2.     Dada uma coleção de n valores, um elemento k é dito majoritário se a quantidade dele é maior que a metade do
  3.     tamanho da coleção. Gerar uma pilha com n elementos e, em seguida, verificar se ela tem um elemento majoritário.
  4.     Caso tenha, apresente-o.
  5. */
  6.  
  7. package war.paz;
  8.  
  9. import java.util.ArrayDeque;
  10. import java.util.Deque;
  11. import java.util.Random;
  12.  
  13.  
  14. public class Maine{
  15.     public static void main(String e[]){
  16.         Random r = new Random();
  17.         Deque<Integer> stack = new ArrayDeque<Integer>();   // A pilha
  18.        
  19.         int size = 10;
  20.        
  21.         for(int i = 0; i < size; i++){
  22.             stack.addFirst(r.nextInt(3));                   // Vamos encher ela de elementos!
  23.         }
  24.        
  25.         System.out.println(stack);                          // Ver como tá
  26.        
  27.         sort(stack);                                        // Ordenar
  28.        
  29.         System.out.println(stack);                          // E ver como ficou depois de ordenar
  30.        
  31.         // Bem, nós sabemos de uma coisa: se há um elemento majoritário, ele também é a mediana
  32.        
  33.         int x = median(stack,stack.size());
  34.    
  35.         // Agora só precisamos verificar o número de vezes que nossa mediana aparece na pilha...
  36.        
  37.         if(timesN(stack,x) > size/2){
  38.             System.out.println("Há um elemento majoritário, e é o " + x);
  39.         }else{
  40.             System.out.println("Não há um elemento majoritário =(");
  41.         }
  42.     }
  43.    
  44.     public static int timesN(Deque<Integer> k, int x){
  45.         int n = 0;
  46.         int size = k.size();
  47.         for(int i = 0; i < size; i++){
  48.                 if(k.peek() == x){
  49.                     k.pop();
  50.                     n++;
  51.                 }else{
  52.                     k.pop();
  53.                 }              
  54.         }
  55.         return n;
  56.     }
  57.    
  58.     public static int median(Deque<Integer> k, int size){
  59.         int ret = 0;
  60.         if(k.size() == size/2){
  61.             return k.peek();
  62.         }
  63.         int j = k.pop();
  64.         ret = median(k,size);
  65.         k.push(j);
  66.         return ret;
  67.     }
  68.    
  69.     public static void sort(Deque<Integer> k) {
  70.         if(!k.isEmpty()){
  71.             int i = k.pop(); // yay, k-pop
  72.             sort(k);
  73.             insert(i, k);
  74.         }
  75.     }
  76.  
  77.     private static void insert(Integer x, Deque<Integer> k) {
  78.         if(k.isEmpty()){
  79.             k.push(x);
  80.             return;
  81.         }
  82.  
  83.         if(x < k.peek()){
  84.             int i = k.pop();
  85.             insert(x, k);
  86.             k.push(i);
  87.         }else{
  88.             k.push(x);
  89.         }
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement