准备面试。试图找出一个解决方案的问题"最快的方法来消除连续重复数组"使用客观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) ;
阵列内方法存在优化:
不要一个接一个地删除元素(这可能会导致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项的重复项,该怎么办?例如,