美文网首页
一个数组元素重新排序问题

一个数组元素重新排序问题

作者: Daved | 来源:发表于2016-03-03 22:28 被阅读345次

问题##

最近在工作中遇到一个比较有意思的问题,根据相关业务逻辑抽象后可以转换为以下问题模型。

现有一个初始化数组为array,需要处理后的结果为result数组。
规则为:将值相同且个数大于1的元素(这些元素有一些相同的特征,如下例中的元素均以字母v开始,并且会连续出现)添加到一个新数组中以替换原来的元素并要求最终数组的元素相对顺序与原始数组一致。
array:{a,v1,v1,v4,v4,b,v2,v2,v5,v5,c,v3,v3}
result:{a,{v1,v1},{v4,v4},b,{v2,v2},{v5,v5},c,{v3,v3}}

思路##

需要解决该问题的关键是需要处理值相同的元素,并需要保证这些元素的结果数组中的相对顺序。要实现此目的需要将原始数组进行拆分处理,将符合条件的值相同的元素保存在一个临时数组中,创建一个空的结果数组,在每次循环处理原始数组时将值相同的元素添加到临时数组中,添加临时数组和不重复元素到结果数组中,具体实现可以参考下面的OC代码,其它语言实现方式类似。

代码##

    //初始化原始数组
    NSMutableArray *originArray = [NSMutableArray array];
    [originArray addObject:@"a"];
    [originArray addObject:@"v1"];
    [originArray addObject:@"v1"];
    
    [originArray addObject:@"v4"];
    [originArray addObject:@"v4"];
    
    [originArray addObject:@"b"];
    [originArray addObject:@"v2"];
    [originArray addObject:@"v2"];
    [originArray addObject:@"v5"];
    [originArray addObject:@"v5"];
    
    [originArray addObject:@"c"];
    [originArray addObject:@"v3"];
    [originArray addObject:@"v3"];
    
    //结果数组
    NSMutableArray *resultArray = [NSMutableArray array];
    
    //临时数组
    NSMutableArray *tempArray = [NSMutableArray array];
    
    for (NSString *item in originArray) {
        
        if ([item hasPrefix:@"v"]){//是否有重复值
            
            if (tempArray.count > 0) {
                NSString *key = tempArray.lastObject;
                
                if ([item isEqualToString:key]) {//值相同加入临时数组
                    [tempArray addObject:item];
                } else {//值不同加入结果数组并清空临时数组
                    NSMutableArray *array = [NSMutableArray arrayWithArray:tempArray];
                    [resultArray addObject:array];
                    [tempArray removeAllObjects];
                    
                    //将当前元素加入临时数组
                    [tempArray addObject:item];
                }
                
            } else {
                
                [tempArray addObject:item];
            }
            
        } else {//没有重复值的元素
            if (tempArray.count > 0) {
                NSMutableArray *array = [NSMutableArray arrayWithArray:tempArray];
                [resultArray addObject:array];
                [tempArray removeAllObjects];
            }
            
            [resultArray addObject:item];
        }
    }
    
    //将最后一组重复值加入结果数组
    if (tempArray.count > 0){
        [resultArray addObject:tempArray];
       }
    NSLog(@"result:%@",resultArray);

输出结果:

屏幕快照 2016-03-03 下午10.15.41.png

相关文章

  • 排序算法(1)-- 初级排序

    问题描述:重新排列数组元素。其中每个元素都有一个主键,排序后索引较大的主键大于索引较小的主键。 排序算法(模板)类...

  • Java 数据结构

    冒泡排序,把数组里大小排序混乱的元素重新排序 插入排序,按元素大小从左往右排序 选择排序,依次在数组中找出最小的元...

  • 算法:摆动排序 I & II

    摆动排序 I 给你一个没有排序的数组,请将原数组就地重新排列满足如下性质 允许相邻元素相等 思路 先对数组进行排序...

  • (三)排序

    1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...

  • JS问题记录

    一、数组问题 1、数组添加元素 2、数组删除指定下标元素 3、数组排序

  • 一个数组元素重新排序问题

    问题## 最近在工作中遇到一个比较有意思的问题,根据相关业务逻辑抽象后可以转换为以下问题模型。 现有一个初始化数组...

  • 2018-07-08

    数组 问题1. 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,...

  • 001-在一个已排序数组中原地移除重复元素

    描述 在一个已经排序的数组中,移除掉重复元素,保证每个元素只出现一次,返回移除元素后数组的长度;不可以重新生成一个...

  • 老生常谈问题之数组去重

    排序去重 思路: 先将原数组进行排序 检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序...

  • Leetcode.75.Sort Colors

    题目 给定一个数组, 数组元素只有0, 1, 2, 对元素进行排序. 思路1 直接快速排序或其他排序方式 时间复杂...

网友评论

      本文标题:一个数组元素重新排序问题

      本文链接:https://www.haomeiwen.com/subject/qhxokttx.html