美文网首页
iOS常见算法题

iOS常见算法题

作者: 笑破天 | 来源:发表于2022-07-12 23:55 被阅读0次

1、二分查找
已知一个有序数组, 和一个 key, 要求从数组中找到 key 对应的索引位置

int binaryFind(int *arr,int len,int key){
    int min=0,max=len-1,mid;
    while (min <= max) {
        mid = (min+max)/2;
        if (key < arr[mid]) {
            max = mid-1;
        } else if (key > arr[mid]) {
            min = mid+1;
        } else {
            return mid;
        }
    }
    return -1;
}

2、字符串反转

- (void)strReverseTest{
    char str[] = "32415";
    int len = strlen(str);
    for (int i=0; i<(len+1)/2; i++) {
        char temp = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = temp;
    }
    NSLog(@"%s",str); // C中打印数组得for循环,不方便
}

3、有序数组合并
将有序数组 {1,4,6,7,9} 和 {2,3,5,6,8,9,10,11,12} 合并为 {1,2,3,4,5,6,6,7,8,9,9,10,11,12}

- (void)arrayMergeTest {
    int a[] = {1,4,6,7,9};
    int b[] = {2,3,5,6,8,9,10,11,12};
    int lenA=5,lenB=9,result[lenA+lenB],i=0,j=0,k=0;
    while (i<lenA && j<lenB) {
        if (a[i]<b[j]) {
            result[k++] = a[i++];
        } else {
            result[k++] = b[j++];
        }
    }
    while (i<lenA) {
        result[k++] = a[i++];
    }
    while (j<lenB) {
        result[k++] = b[j++];
    }
    NSLog(@"end");
}

4、查找两个子视图的共同父视图

- (NSMutableArray*)findSuperview:(UIView*)view {
    NSMutableArray *array = [NSMutableArray array];
    UIView*spView = view.superview;
    while (spView) {
        [array addObject:spView];
        spView = spView.superview;
    }
    return array;
}
- (NSMutableArray*)findCommonSuperview:(UIView*)view1 view2:(UIView*)view2{
    NSMutableArray *array = [NSMutableArray array];
    NSArray *superviews1 = [self findSuperview:view1];
    NSArray *superviews2 = [self findSuperview:view2];
    int len = MIN(superviews1.count,superviews2.count);
    for (int i=0; i<len; i++) {
        UIView *super1 = superviews1[superviews1.count-1-i];
        UIView *super2 = superviews2[superviews2.count-1-i];
        if (super1 == super2) {
            [array addObject:super1];
        } else {
            break;
        }
    }
    return array;
}

5、求无序数组中的中位数
中位数:数组中最中间的那个数或最中间的那两个数的平均值
思路:先排序,再求中位数

float midValue(int arr[], int len){
    float mid = (len%2 == 0) ? (arr[len/2] + arr[len/2-1])/2.0 : arr[len/2];
    return mid;
}
void midValueSort(int arr[], int len){
    for (int i=0; i<len; i++) {
        for (int j=0; j<len-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}
- (void)midValueTest {
    int arr[] = {5,1,3,6,100,8};
    midValueSort(arr,6);
    float mid = midValue(arr, 6);
    NSLog(@"%.1f",mid);
    
}

6、Hash算法
例:在一个字符串中找到第一个只出现一次的字符[核心思想:生成一个数组,数组中存储每个字符出现的次数]

char findFirstChar(char cha[], int len) {
    char result = '\0';
    int arr[128];
    for (int i = 0; i < 128; i++) {
        arr[i] = 0;
    }
    for (int i = 0; i < len; i++) {
        arr[cha[i]]++;
    }
    for (int i = 0; i < len; i++) {
        if (arr[cha[i]] == 1) {
            result = cha[i];
            break;
        }
    }
    return result;
}
- (void)findFirstCharTest {
    char cha[] = "aabbcdddf";
    char result = findFirstChar(cha, 9);
    NSLog(@"%c",result);
}

相关文章

  • iOS常见算法题

    1、二分查找已知一个有序数组, 和一个 key, 要求从数组中找到 key 对应的索引位置 2、字符串反转 3、有...

  • 常见算法题

    1. reserve 让数组反转倒置 2. 排序算法 面试最常考:快速排序和希尔算法 (tips) 原理:如果是想...

  • iOS面试常见算法题2020(一)

    现在面试iOS中高级开发,算法题已是必然会出现的一个环节了,这里把面试遇到的算法题和LeetCode上一些比较经典...

  • iOS面试题之人在面试都是套路(十二)*宇*天公司iOS面试题

    看来我还是学艺不精,上一篇文章刚总结常见的iOS笔试题算法,马上就遇到一家这样的考算法的公司,由于我链表的题没写出...

  • 程序员进阶之算法练习(三十四)LeetCode专场

    前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题:1、2、3题都是Medium的...

  • iOS算法之删除重复连续的字符

    iOS面试常见的算法题、自己面试遇到的、希望能帮到大家、有错误欢迎指正 删除给定字符串中重复连续的字符。如“aaa...

  • IOS常见算法

    常见算法: 快速排序: 选择排序: 冒泡排序: 测试代码:

  • iOS常见算法

    1、 对以下一组数据进行降序排序(冒泡排序)。“24,17,85,13,9,54,76,45,5,63” 2、 对...

  • iOS常见算法

    升序算法:用冒泡排序法 选择排序法 快速排序

  • Python 常见算法题

    打印菱形 打印直角三角 打印等边三角形 打印100以内的斐波那契数列 求10万内的所有素数 猴子吃桃问题 猴子第一...

网友评论

      本文标题:iOS常见算法题

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