比如
{1,1,1,2,2,3,1,1} 
变为:
{{1,1,1},{2,2},3,{1,1}}
要写成一个通用的方法/函数,可以用集合框架中的List

解决方案 »

  1.   

    这是作业?public static void main(String[] args) throws IOException {
    int[][] result = parseArray(new int[]{1,1,1,2,2,3,1,1});
    System.out.print("{");
    for(int i = 0; i < result.length; i ++){
    System.out.print("{");
    for(int j = 0; j < result[i].length; j ++){
    System.out.print(result[i][j]);
    if(j != result[i].length - 1)
    System.out.print(",");
    }
    System.out.print("}");
    if(i != result.length - 1)
    System.out.print(",");
    }
    System.out.print("}");
    }

    private static int[][] parseArray(int[] array){
    List<int[]> list = new ArrayList<int[]>();
    int value = array[0];
    int length = 1;
    for(int i = 1 ; i < array.length; i ++){
    if(array[i] != value){
    int[] arr = new int[length];
    for(int j = 0 ; j < arr.length ; j ++){
    arr[j] = value;
    }
    list.add(arr);
    value = array[i];
    length = 1;
    }else
    length ++;
    }
    int[] arr = new int[length];
    for(int j = 0 ; j < arr.length ; j ++){
    arr[j] = value;
    }
    list.add(arr);
    return list.toArray(new int[list.size()][]);
    }
      

  2.   

    刚想了个更简单的办法String str = "1,1,1,3,2,51,3,3,55,55,55,3,3,2";
    Pattern p = Pattern.compile("(?:(\\d+)[,]?)+?(?!\\1)");
    Matcher m = p.matcher(str);
    List<int[]> list = new ArrayList<int[]>();
    while(m.find()){
    String[] temp = m.group().split(",");
    int[] array = new int[temp.length];
    for(int i = 0 ; i < array.length; i ++)
    array[i] = Integer.parseInt(temp[i]);
    list.add(array);
    }
      

  3.   


    Integer [] nums = {1, 2, 3, 3, 2, 1, 1, 5, 7,9, 1};
    List<List<Integer>> outList = toGroup(nums);
    //输出
    //[[1, 1, 1, 1], [2, 2], [3, 3], [5], [7], [9]]
    System.out.println(outList);        /**
     *  返回结果为list形式
     * <br>------------------------------<br>
     * @return
     */
    private static List<List<Integer>> toGroup(Integer [] nums) {
    if (nums == null || nums.length == 0) {
    return null;
    }
    List<Integer> list= new ArrayList<Integer>(nums.length);
    Collections.addAll(list, nums);
    Collections.sort(list);
    int x = list.get(0);
    List<List<Integer>> outList = new ArrayList<List<Integer>>(); 
    List<Integer> innerList = new ArrayList<Integer>(); 
    outList.add(innerList);
    for (int i = 1; i < list.size(); i++) {
    int num = list.get(i);
    if (num == x) {
    innerList.add(num);
    } else {
    x = num;
    innerList = new ArrayList<Integer>(); 
    innerList.add(num);
    outList.add(innerList);
    }
    }
    return outList;
    }
      

  4.   

    创建一个空的list和一个最后结果resultList,得到第一个数字并塞入list并用一个previous记录当前这个数字遍历下一个,如果和previous相等继续塞入list继续往下;如果和previous不相等将list加入resultList,清空list,将previous更新为当前值,将当前值塞入清空后的list。一直循环到最后最后将最后的list塞入resultList
      

  5.   


    public static void main(String[] args){
    Integer [] nums = {1, 2, 3, 3, 2, 1, 1, 5, 7,9, 1};
    Map<String,Integer> map = new LinkedHashMap();
    for(int i= 0;i<nums.length;i++){
    if(map.containsKey(nums[i]+"")){
    map.put(nums[i]+"",map.get(nums[i]+"")+ 1);
    }
    else map.put(nums[i]+"", 1);
    }
    System.out.println(map);
    List<List<Integer>> data = new ArrayList<List<Integer>>();
    for(String e: map.keySet()){
    List<Integer> temp = new ArrayList<Integer>();
    for(int i = 0;i<map.get(e);i++){
    temp.add(Integer.parseInt(e));
    }
    data.add(temp);
    }
    System.out.println(data);
    }
      

  6.   

    public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>
    Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中。) 此实现可以让客户避免未指定的、由 HashMap(及 Hashtable)所提供的通常为杂乱无章的排序工作,同时无需增加与 TreeMap 相关的成本。使用它可以生成一个与原来顺序相同的映射副本,而与原映射的实现无关:      void foo(Map m) {
             Map copy = new LinkedHashMap(m);
             ...
         }
     
    实现代码 :
    import java.util.Map;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.LinkedHashMap;
    public class ArrayTest
    {
     public static void main(String[] args)
     {
            Integer [] nums = {1,1,1,2,2,3,1,1}  ;
            Map<String,Integer> map = new LinkedHashMap<String,Integer>();
            for(int i= 0;i<nums.length;i++){
                if(map.containsKey(nums[i]+"")){
                    map.put(nums[i]+"",map.get(nums[i]+"")+ 1);
                }
                else map.put(nums[i]+"", 1);
            }
            System.out.println(map);
            List<List<Integer>> data = new ArrayList<List<Integer>>();
            for(String e: map.keySet())
    {
                List<Integer> temp = new ArrayList<Integer>();
                for(int i = 0;i<map.get(e);i++){
                    temp.add(Integer.parseInt(e));
                }
                data.add(temp);
            }
            System.out.println(data);
        }
    }
      

  7.   

    6楼看错题目了。那这样更简单了
    一个循环搞定了。
    Integer [] nums = {1, 2, 3, 3, 2, 1, 1, 5, 7,9, 1};
    List<List> list = new ArrayList<List>();
    List tempdata = new ArrayList<Integer>();
    for(Integer e: mums){
    if(tempdata.size()==0){
    tempdata.add(e);
    }
    else if(tempdata.get(0)==e){
    tempdata.add(e);
    }
    else{
    list.add(tempdata);
    tempdata = new ArrayList();
    tempdata.add(e);
    }
    }
    list.add(tempdata);