iOS开发——有序数组去重的几种算法

算法,在学校的时候就掌握的不牢固,如今还是要还上了。

NSMutableArray *dateMutablearray = [@[] mutableCopy];

NSArray *array1 = @[@"1",@"2",@"3", @"3",@"4",@"5",@"7",@"9",@"9", @"11",];

NSMutableArray *array = [NSMutableArray arrayWithArray:array1];

for (int i = 0; i < array.count; i ++) {

    NSString *string = array[i]; 

    NSMutableArray *tempArray = [@[] mutableCopy];

    [tempArray addObject:string];

    for (int j = i+1; j < array.count; j ++) {

        NSString *jstring = array[j];

        NSLog(@"jstring:%@",jstring);

        if ([string isEqualToString:jstring]) {

           NSLog(@"jvalue = kvalue");

           [tempArray addObject:jstring];

        }

    }

    if ([tempArray count] > 1) {

        [array removeObjectsInArray:tempArray];

        i -= 1;    //去除重复数据 新数组开始遍历位置不变

    }

}

最差的算法:
去重,与数组是否有序无关
public void noDups(){
    //从0开始遍历
    for(int i=0; i<nElems-1; i++){
        //与后面每一个比较
        for(j=i+1; j<nElems; j++){
            //如果相等,后面的所有的项向前移动,总数-1
            if(a[i]==a[j]){
                for(k=j+1; k<nElems; k++){
                    a[j] = a[j+1];
                    nElems--;
                }
            }
        }
    }
}

把后面不同的往前
public void noDups(){
    //数组从小到大排列
    this.insertionSort();
    int i=0;    //第一个指针
    int j=0;    //第二个指针
    for(j=1; j<nElems;j++){
        //遇到相同的跳过,不同的则加到前面
        if(a[j]!=a[i]){
            a[++i]=a[j]
        }
    }
    nElems = i+1;
}
把重复的标记为-1,假设没有负数
public void noDups(){
    //数组从大到小排列
    this.insertionSort();
    final int FLAG = -1;    //重复数字标记
    int holdNumber; //被标记的数字个数
    //寻找重复项并标记
    for(int i=0; i<nElems; i++){
        for(int j=i+1; j<nElems; j++){
            if(a[i]==a[j]){
                a[j] = FLAG;
                holdNumber++;
            }
        }
    }
    //处理被标记的数字 //思路和第一个一样
    int i=0; //索引位
    for(int j=1; j<nElems; j++){    //第一个不可能是重复数
        //找到第一个标记位
        if(a[j]==FLAG && i==0){
            i = j;
        }else if(a[j]!=FLAG && i!=0){   //逻辑同第二个算法
            a[i] = a[j];
            i++;
        }
    }
    nElems -= holdNumber;
}
时间: 2024-12-14 18:12:20

iOS开发——有序数组去重的几种算法的相关文章

有序数组去重的几种算法

最差的算法: 最差的算法: 去重,与数组是否有序无关 public void noDups(){ //从0开始遍历 for(int i=0; i<nElems-1; i++){ //与后面每一个比较 for(j=i+1; j<nElems; j++){ //如果相等,后面的所有的项向前移动,总数-1 if(a[i]==a[j]){ for(k=j+1; k<nElems; k++){ a[j] = a[j+1]; nElems--; } } } } } 把后面不同的往前 public v

数组去重的几种算法

第一种算法: 算法思想: 1.构建一个新数组,新数组包含一个元素,元素值为目标数组的一个值: 2.从目标数组的第二个元素开始遍历,依次取出每一个元素: 3.将取出的元素与新数组里面的所有元素进行比较,如果没有出现,则将该元素添加到新数组中,如果出现,则处理下一个目标数组的元素: 4.目标数组的所有元素均已处理完. 1 Array.prototype.deleteRepeat1=function (){ 2 //构建一个新数组,存放结果,首先给newArray一个初值,初值为调用该函数的数组的第一

js数组去重的5种算法实现

1.遍历数组法最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: ? 1 2 3 4 5 6 7 8 9 10 11 // 最简单数组去重法 function unique1(array){ var n = []; //一个新的临时数组 //遍历当前数组 for(var i = 0; i < array.l

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值

【学】数组去重的3种方式

数组去重的3种方式 var arr = [1,4,2,3,4,5,6,7,3,4,5,23,2,3,4,5,3,2,3,4,5];   function findInArray(n,arr){ for (var i=0; i<arr.length; i++) { if(arr[i]==n){ return true; } } return false; }   function removeRep1(arr){ //方法2 var arr1 = []; for (var i=0; i<arr.

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

iOS开发 跳转场景的三种方式

假设A跳转到B,三种方法: 1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任何代码,在A上点击Button就会跳转到B 2. 按住ctrl键,拖动A上的View Controller到B上,弹出菜单,选择Modal,两个场景间自动添加连接线和图标,选中该图标,打开Storyboard Segue,identifier输入一个标识符,这里以”aaaa”为例.A里需要跳转时,执行下面的代码: 1 [self performSegueWithId

iOS开发之动画编程的几种方法

iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKeyframeAnimation>,NSTimer 这里我就总结了一下这五种方法,其实iOS开发中动画的编程都会在这里面变化,所以只要弄懂了这些动画编程就不难了. 一:UIView动画 一般方式 [UIView beginAnimations:@"ddd" context:nil];/

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in