| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2026 人关注过本帖
标题:整数数组中连续递增子序列转化问题
只看楼主 加入收藏
eruera
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-12-10
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:5 
整数数组中连续递增子序列转化问题
有一组数据 例如[1,3,8,17,18,19,20,50,60,72,73,74],把其中连续递增的整数子序列变为例如:17,18,19,20转化为17~20.最终整理后的打印结果为[1,3,8,17~19,50,60,72~74]这种形式,刚开始以为简单,但自己尝试了一些方法但效果不好,尤其是对于数据开头和结尾的数据处理的并不得当,所以看各路大神能否有好方法,在此表示感谢!
2015-09-22 09:52
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
可以看看你目前的算法吗?

剑栈风樯各苦辛,别时冰雪到时春
2015-09-22 10:06
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:18 
程序代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//有一组数据 例如[1,3,8,17,18,19,20,50,60,72,73,74],
//[1,3,8,17~20,50,60,72~74]这种形式
public class Test
{
    public static List<String> convert(int ...src)
    {
        int pre,loc,next;
        String strtmp="~";
        List<Integer> desc=new ArrayList<Integer>();
        List<String> res=new ArrayList<String>();
        for(int s:src)
        {
            desc.add(s);
        }
        Iterator<Integer> itr=desc.iterator();
        pre=itr.next();
        loc=itr.next();
        while(itr.hasNext())
        {
            next=itr.next(); 
            if(pre+1!=loc&&loc+1==next)
            {
                strtmp=pre+"\n"+loc;
                res.add(strtmp);
            }
            else if(pre+1==loc&&loc+1==next&&!strtmp.equals("~"))
            {
                strtmp="~";
                res.add(strtmp);
            }
            else if(pre+1!=loc&&loc+1!=next)
            {
                strtmp=String.valueOf(pre);
                res.add(strtmp);
            }
            pre=loc;
            loc=next;
        }
        res.add(String.valueOf(loc));
        return res;
    }
    public static void main(String[] args) 
    {
        int[] src={1,3,8,17,18,19,20,50,60,72,73,74};
        List<String> lis=convert(src);
        List<String> res=new ArrayList<String>();
        String[] arr=new String[lis.size()];
        for(int i=0;i<lis.size();i++)
        {
            arr[i]=lis.get(i);
        }
        for(int i=0;i<arr.length-2;i++)
        {
            if(arr[i+1].equals("~"))
            {
                res.add(arr[i]+"~"+arr[i+2]);
                i+=2;
            }
            else
            {
                res.add(arr[i]);
            }
        }
        Iterator<String> itr=res.iterator();
        while(itr.hasNext())
        {
            System.out.print(itr.next()+"\t");
        }
    }
}

剑栈风樯各苦辛,别时冰雪到时春
2015-09-22 11:12
eruera
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-12-10
收藏
得分:0 
回复 2楼 林月儿
我只是简单的写了一下 把每一个数和之前以及之后的数相比,符合不同条件就列入不同的表达方式,其实我这是想在excel中整理比较多的数据的,有算法实现能够省好多事
2015-09-22 15:10
eruera
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-12-10
收藏
得分:0 
回复 3楼 林月儿
太感谢了!!虽然之前学过一点编程,但是真正自己独立解决问题很少,我会好好理解您的代码的,我看能不能把这个代码在excel vba 中实现,初学者让您费心了!!
2015-09-22 15:42
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 5楼 eruera
不客气,我也是初学者相互学习

剑栈风樯各苦辛,别时冰雪到时春
2015-09-22 17:18
快速回复:整数数组中连续递增子序列转化问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013537 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved