Anzak icon

Represent Integer array as ranges

Anzak | PRO | 10/10/18 12:29:36 PM UTC | 0 ⭐ | 218 👁️ | Never ⏰ | []
Java |

1.38 KB

|

None

|

0 👍

/

0 👎

import java.util.Arrays;
import java.util.List;
 
class Scratch {
 
/** https://stackoverflow.com/questions/31258430/java-convert-int-to-smallest-representation-as-ranges */
 
  public static void main(String[] args) {
    List<Integer> array = new java.util.ArrayList<Integer>();
    System.out.println(getRange(array));
    array.add(1);
    System.out.println(getRange(array));
    array.addAll(java.util.Arrays.asList(new Integer[]{3, 5, 4, 8, 9, 10}));
    System.out.println(getRange(array));
    array.add(2);
    System.out.println(getRange(array));
    array.add(15);
    System.out.println(getRange(array));
 
    /** output
     1
     1,3-5,8-10
     1-5,8-10
     1-5,8-10,15
     */
  }
 
  public static String getRange(List<Integer> array) {
    Integer[] nums = array.toArray(new Integer[array.size()]);
    Arrays.sort(nums);
    StringBuilder sb = new StringBuilder();
    if (nums.length == 0) return sb.toString();
    int begin = nums[0], end = nums[0];
    for (int cur : nums)
      if (cur - end <= 1)
        end = cur;
      else {
        appendRange(sb, begin, end);
        begin = end = cur;
      }
    appendRange(sb, begin, end);
    return sb.substring(1);
  }
 
  private static void appendRange(StringBuilder sb, int begin, int end) {
    sb.append(",").append(begin);
    if (end != begin)
      sb.append("-").append(end);
  }
 
 
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎