当前位置: 首页 > 知识库问答 >
问题:

在objective-C中从阵列中消除连续重复项的最快方法

贺英悟
2023-03-14

准备面试。试图找出一个解决方案的问题"最快的方法来消除连续重复数组"使用客观C.i. e输入=[1,2,2,1,2,3,3,4]输出=[1,2,1,2,3,4]

>

  • 对于数组内方法:循环数组中的元素,若元素==上一个元素,则移除它并重新调整所有其他元素以向下移动。

    对于我们可以使用另一个数组的方法。如果element==上一个元素,不要将其添加到新的“唯一数组”,否则将其添加到唯一数组。

    有没有更好的解决办法?代码如下。有可能的优化吗?

    使用另一个数组

    //Pseudocode for sucessive dup elimination when using another array 
        //
        //duplicateLessArray = empty array
        //previous element = not set
        //
        //for (loop through each element in origArray)
        //  if(previous element == not set or element != previous element)
        //    set previousElement = element 
        //    add element to duplicateLessArray
        //  
    
        NSMutableArray *duplicateLessArray ;
    
        duplicateLessArray = [[NSMutableArray alloc] init] ;
    
        for (NSNumber *nextNumber in origArray)
        {
              if ([nextNumber intValue] != [[duplicateLessArray lastObject] intValue])
              {
                [duplicateLessArray addObject:nextNumber] ;
              }
         }
    
     NSLog(@"Duplicate less array = %@",duplicateLessArray) ;
    

    使用相同的数组

        //Pseudocode for in array sucessive dup elimination
        //
        //previous element = not set
        //
        //for (loop through each element in origArray)
        //  if(previous element == not set or element != previous element)
        //    set previousElement = element 
        //  else
        //      delete it from origArray
        //      move back all elements by 1
    
            NSInteger numElementsInDupLessArray = 0 ;
            NSNumber *prevElement ;
            for (NSNumber *nextNumber in [origArray copy])
            {
              if (numElementsInDupLessArray == 0 || [nextNumber intValue] != [prevElement intValue])
              {
                prevElement=nextNumber ;
                numElementsInDupLessArray++;
              }
              else
              {
                [origArray removeObjectAtIndex:numElementsInDupLessArray] ;
              } 
            }
    
       NSLog(@"Duplicate less array = %@",origArray) ;
    
  • 共有1个答案

    太叔鸿
    2023-03-14

    阵列内方法存在优化

    不要一个接一个地删除元素(这可能会导致O(n^2)的复杂性),只需移动单个元素。

    numOfRemoved = 0
    GoodValue = A[0]
    for i = 1 to arrayEnd //note start from 2nd element
      if A[i] = GoodValue then
        numOfRemoved++
      else
        GoodValue = A[i]
        A[i-numOfRemoved] = A[i]
    Resize array once to (Length - numOfRemoved)
    

    “NunR”的当前元素已删除(表示当前元素)

    [5 5 1 7 7 7 4]   nr = 0  ; 5 stays at index 0
    [5 '5 1 7 7 7 4]  nr = 0->1
    [5 5 '1 7 7 7 4]  nr = 1 ; 1 goes to index 2-1 = 1
    [5 1 1 '7 7 7 4]  nr = 1 ; 7 goes to index 2  
    [5 1 7 7 '7 7 4]  nr = 1->2
    [5 1 7 7 7 '7 4]  nr = 2->3
    [5 1 7 4 7 7 '4]  nr = 3 ; 4 goes to index 6-3 = 3
    [5 1 7 4]         resize
    
     类似资料:
    • 我想从字符串中消除连续重复,如 这是我的密码 我得到了错误非穷举模式,我想这是第二行的错误,当只剩下1个字符时,程序不知道如何处理。我该怎么修?

    • 问题内容: 我有一个需要删除/过滤重复项的对象数组。我本来只是要在Object元素上覆盖equals和hachCode,然后将它们放在Set中…但是我认为我至少应该轮询一下stackoverflow,看看是否还有另一种方法,也许是某些其他API的一些聪明方法? 问题答案: 我会用你的方法来覆盖同意,并和使用的东西实现。 这样做还使其他开发人员绝对清楚需要非重复特征。 另一个原因-您现在必须选择最能

    • 问题内容: 我有一个这样的表: 17年7月1日100年 7月2日100年 3月7日100年17年7月300 17年7月4日300年 7月5日500年 7月5日500年7月7日听500年 7月7日听300年 8月7日听700年17年7月 9日听100 17年7月10日听100 我想输出是(按顺序)通过消除重复的连续但不是全部重复: 100 300 500 300 400 100 我无法选择Disti

    • 问题内容: 我想删除彼此跟随的重复项,但不要删除整个数组中的重复项。另外,我想保持顺序不变。 所以如果输入是输出 我找到了一种使用方法,但我正在寻找更快的NumPy解决方案。 问题答案: 一般的想法是用来查找数组中两个连续元素之间的差异。然后我们只索引那些给出差异元素的索引。但由于长度 是1那么短的索引之前,我们需要对涉及diff阵列的开始。 说明:

    • 假设我们有一个函数,它返回100万个长度为30的整数向量,每个向量的条目都很小(比如-100到100之间)。进一步假设输出只有大约30000个唯一向量,其余是重复的。检索唯一输出向量列表的良好数据结构和算法是什么?优选地,当3%的唯一向量的比例大致恒定时,该解决方案应缩放良好。 这个问题主要是关于数据结构的,但我计划使用 STL 在 C 中实现它,所以也欢迎任何关于实现的提示。 朴素算法是存储已知

    • 因此,我有一个名为的postgresql表,其中有两列:和。列是jsonb类型的,指定给定日期时间的各种状态数据。下面是该表的一个示例: 如果我想删除两个json项的重复项,该怎么办?例如,