zoukankan      html  css  js  c++  java
  • 常见的算法

    /* 快速排序

     * 升序排列

     */

    - (void)quickSortArray: (NSArray *)array withLeftIndex: (NSInteger)leftIndex andRightIndex: (NSInteger)rightIndex {

        NSMutableArray *arr = [NSMutableArray arrayWithArray:array];

        if (leftIndex >= rightIndex) {

            return;

        }

        NSInteger i = leftIndex;

        NSInteger j = rightIndex;

        NSInteger key = [arr[leftIndex] integerValue];

        while (i < j) {

            while (i < j && key >= [arr[j] integerValue]) {

                j--;

            }

            arr[i] = arr[j];

            while (i < j && key <= [arr[i] integerValue]) {

                i++;

            }

            arr[j] = arr[i];

        }

        arr[i] = @(key);

        [self quickSortArray:arr withLeftIndex:leftIndex andRightIndex:i - 1];

        [self quickSortArray:arr withLeftIndex:i + 1 andRightIndex:rightIndex];

    }

    /* 冒泡排序

     * 倒序排列 

     * 时间复杂度 O(n^2)

     */

    - (NSArray *)sortArrayWithDesc: (NSArray *)array {

        NSMutableArray *arr = [NSMutableArray arrayWithArray:array];

        for (int i = 0; i < arr.count - 1; i++) {

            for (int j = 0; j < arr.count - i - 1; j++) {

                if (arr[j] < arr[j+1]) {

                    NSNumber *temp = arr[j];

                    arr[j] = arr[j+1];

                    arr[j+1] = temp;

                }

            }

        }

        return (NSArray *)arr;

    }

    /* 选择排序

     * 升序排列 

     */

    - (NSArray *)sortArrayWithAsc: (NSArray *)array {

        NSMutableArray *arr = [NSMutableArray arrayWithArray:array];

        for (NSInteger i = 0; i < arr.count - 1; i++) {

            NSInteger index = 0;

            index = i;

            for (NSInteger j = i + 1; j < arr.count; j++) {

                if (arr[index] > arr[j]) {

                    index = j;

                }

            }

            if (index != i) {

                NSNumber *temp = arr[i];

                arr[i] = arr[index];

                arr[index] = temp;

            }

        }

        return (NSArray *)arr;

    }

    /* 从排好序的数组中去重

     * 时间复杂度O(n), 空间复杂度O(1)

     */

    - (NSInteger)removeDuplicatesFromSortedArray: (NSArray *)nums {

        if (nums.count <= 0) return 0;

        NSInteger index = 0;

        NSMutableArray *temp = [NSMutableArray arrayWithArray:nums];

        for (NSInteger i = 1; i < temp.count; i++) {

            if (temp[index] != temp[i]) {

                temp[++index] = temp[i];

            }

        }

        NSRange range = NSMakeRange(index, nums.count - index - 1);

        [temp removeObjectsInRange:range];

        NSLog(@"temp===%@", temp);

        return index + 1;

    }

    /* 从排好序的数组中去重,重复最多出现n次

     * 时间复杂度O(n), 空间复杂度O(1)

     */

    - (NSInteger)removeDuplicatesFromSortedArray: (NSArray *)nums MostDuplicatesCount: (NSInteger)times {

        if (nums.count <= times) return nums.count;

        NSInteger index = times;

        NSMutableArray *temp = [NSMutableArray arrayWithArray:nums];

        for (NSInteger i = 1; i < temp.count; i++) {

            if (temp[i] != temp[index - times]) {

                temp[index++] = temp[i];

            }

        }

        NSRange range = NSMakeRange(index, nums.count - index);

        [temp removeObjectsInRange:range];

        NSLog(@"temp===%@", temp);

        return index;

    }

    /* 数组无重复,从数组中找到target的位置

     * 时间复杂度O(log n), 空间复杂度O(1)

     */

    - (NSInteger)searchInRotatedSortedArray: (NSArray *)nums withTarget: (NSNumber *)target {

        NSInteger first = 0;

        NSInteger last = nums.count;

        while (first != last) {

            NSInteger mid = first + (last - first) / 2 ;

            if (nums[mid] == target) {

                return mid;

            }

            if (nums[first] <= nums[mid]) {

                if (nums[first] <= target && target < nums[mid]) {

                    last = mid;

                } else {

                    first = mid + 1;

                }

            }

            else {

                if (nums[mid] < target && target <= nums[last-1]) {

                    first = mid + 1;

                } else {

                    last = mid;

                }

            }

        }

        return -1;

    }

  • 相关阅读:
    Python-第三方库requests详解
    python读取excel文件
    python 代理
    python urllib 和 urllib2
    HTTPS请求 SSL证书验证
    python requests.exceptions.ConnectionError
    python django -7 Git与项目
    python django -6 常用的第三方包或工具
    python django -5 进阶
    python django -4 模板
  • 原文地址:https://www.cnblogs.com/wangliang2015/p/7045745.html
Copyright © 2011-2022 走看看