Advertisement
uopspop

Untitled

Nov 2nd, 2020
2,124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.56 KB | None | 0 0
  1. package other;
  2.  
  3. public class interview_arrayshift {
  4.     /**
  5.      * n = 5
  6.      * [1,2,3,4,5] or [5,4,3,2,1]
  7.      * [1,2,3,4,5]: true : [0, +1, +1, +1, +1]
  8.      * [3,4,5,1,2]: true : [0, +1, +1, -4, +1, +1]
  9.      * *[4,5,1,2,3]: true : [0, +1, -4, +1, +1]
  10.      * [5,1,2,3,4]: true : [0, -4, +1, +1, +1]
  11.      * [5,4,1,2,3]: false
  12.      * *[3,2,1,5,4]: true : [0, -1, -1, +4, -1]
  13.      *
  14.      */
  15.  
  16.     public static void main (String[] args) {
  17.  
  18.  
  19. //        int[] ary = {1,2,3,4,5};
  20. //        int[] ary = {4,5,1,2,3};
  21. //        int[] ary = {4,5,6,7,8,1,2,3};
  22. //        int[] ary = {7,8,4,5,6,1,2,3}; // wrong: double downs
  23.  
  24. //        int[] ary = {5,4,3,2,1};
  25. //        int[] ary = {3,2,1,5,4};
  26. //        int[] ary = {7,6,5,4,3,2,1,9,8};
  27.         int[] ary = {3,2,1,7,6,5,9,8}; // wrong: double ups
  28.  
  29.  
  30.         boolean result_asce = check_asec(ary);
  31.         if (result_asce == true)
  32.             System.out.println("result_asce: " + result_asce);
  33.  
  34.         boolean result_desc = check_desc(ary);
  35.         if (result_desc == true)
  36.             System.out.println("result_desc: " + result_desc);
  37.  
  38.     }
  39.  
  40.     private static boolean check_asec(int[] ary) {
  41.         // O: ups
  42.         // O: ups down ups
  43.         // X: ups down down
  44.         int correct_sum_1 = ary.length - 1;
  45.         int correct_sum_2 = -1;
  46.  
  47.         int diff_sum;
  48.         int sum = 0;
  49.         int i_prev = 0;
  50.  
  51.         int count_go_down = 0;
  52.  
  53.         for (int i = 1; i < ary.length; i++) {
  54.             int diff = ary[i] - ary[i_prev];
  55.             if (diff < 0) count_go_down++;
  56.             if (count_go_down > 1) return false;
  57.  
  58.             sum += diff;
  59.             i_prev = i;
  60.         }
  61.  
  62.         if (sum == correct_sum_1) {
  63.             return true;
  64.         }else if (sum == correct_sum_2) {
  65.             return true;
  66.         }
  67.  
  68.         return false;
  69.     }
  70.  
  71.  
  72.     private static boolean check_desc(int[] ary) {
  73.         // O: downs
  74.         // O: downs up downs
  75.         // X: downs up downs
  76.         int correct_sum_1 = -(ary.length - 1);
  77.         int correct_sum_2 = +1;
  78.  
  79.         int diff_sum;
  80.         int sum = 0;
  81.         int i_prev = 0;
  82.  
  83.         int count_go_up = 0;
  84.  
  85.         for (int i = 1; i < ary.length; i++) {
  86.             int diff = ary[i] - ary[i_prev];
  87.             if (diff > 0) count_go_up++;
  88.             if (count_go_up > 1) return false;
  89.  
  90.             sum += diff;
  91.             i_prev = i;
  92.         }
  93.  
  94.         if (sum == correct_sum_1) {
  95.             return true;
  96.         }else if (sum == correct_sum_2) {
  97.             return true;
  98.         }
  99.  
  100.         return false;
  101.     }
  102.  
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement