Paste Search Dynamic
Recent pastes
node getScores
  1. public class Test {
  2.         public static void main(string[] args) {
  3.                 int[] nums1 = { 17, 12, 10, 2, 7, 2, 11, 20, 8 };
  4.                 int size1 = 3, m1 = 4;
  5.                 int[] nums2 = { 6, 18, 8, 14, 10, 12, 18, 9 };
  6.                 int size2 = 80, m2 = 3;
  7.                 int[] nums3 = { 18, 5, 15, 18, 11, 15, 9, 7 };
  8.                 int size3 = 5, m3 = 1;
  9.                 System.out.println(getScores(nums1, size1, m1));
  10.                 System.out.println(getScores(nums2, size2, m2));
  11.                 System.out.println(getScores(nums3, size3, m3));
  12.  
  13.         }
  14.  
  15.         private static int getScores(int[] nums, int size, int m) {
  16.                 int res = 0;
  17.                 Node head = new Node(-1);
  18.                 Node tail = new Node(-1);
  19.                 Node headRef = head;
  20.                 Node tailRef = tail;
  21.                 for (int i = 0; i < nums.length; i++) {
  22.                         Node node = new Node(nums[i]);
  23.                         node.left = headRef;
  24.                         headRef.right = node;
  25.                         headRef = headRef.right;
  26.                 }
  27.                 headRef.right = tailRef;
  28.                 tailRef.left = headRef;
  29.                 for (int i = 0; i < size; i++) {
  30.                         Node max = head;
  31.                         Node start = head.right;
  32.                         Node end = tail.left;
  33.                         for (int j = 0; j < m; j++) {
  34.                                 if (end != null) {
  35.                                         if (end.val > max.val)
  36.                                                 max = end;
  37.                                         end = end.left;
  38.                                 }
  39.                                 if (start != null) {
  40.                                         if (start.val > max.val)
  41.                                                 max = start;
  42.                                         start = start.right;
  43.                                 }
  44.                         }
  45.                         if (max.left != null && max.right != null) {
  46.                                 max.left.right = max.right;
  47.                                 max.right.left = max.left;
  48.                                 res += max.val;
  49.                         }
  50.                 }
  51.                 return res;
  52.         }
  53. }
  54.  
  55. class Node {
  56.         int val;
  57.         Node left;
  58.         Node right;
  59.  
  60.         public Node(int val) {
  61.                 super();
  62.                 this.val = val;
  63.         }
  64. }
Parsed in 0.007 seconds