每周一道算法题(一)

作者: CrazySteven | 来源:发表于2017-03-15 11:41 被阅读679次

    最近加了个群,大家一起学习学习提高,然后刚好今天是一个算法题,然而不支持OC,只好把忘完的C再捡起来,写这个难度为“easy”的算法题,因为iOS完全兼容C,所以我的题目还是写iOS啦啦啦~~

    题目是这样的:

    给一个数组,每一位是一个整数.再给一个整数作为“目标”.数组中会有两个数的和,恰好为这个“目标”.找到这两个数,并返回它们的下标.(可以假定给出的输入只有一个解,而且一个数不能用两次)

    由于题目上说了有一个解,我就不做错误处理了,直接上我的答案

    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    
    int* searchIndexOfArr(int array[N],int num) {
        int *result = (int*)malloc(2 * sizeof(int));
        result[0] = result[1] = N;
        for (int x = 0; x < N - 1; x++) {
            for (int y = x + 1; y < N; y++) {
                if (array[x] + array[y] == num) {
                    result[0] = x;
                    result[1] = y;
                    break;
                }
            }
            if (result[0]<N) {
                break;
            }
        }
        return result;
    }
    
    int main(int argc, const char * argv[]) {
        int numArr[N];
        for (int i = 0; i < N; i++) {
            numArr[i] = arc4random()%100 + 1;
            printf("arr[%d]=%d\n", i,numArr[i]);
        }
        int num = (numArr[N/2] + numArr [N-1]);
        printf("num = %d\n",num);
        printf("第一个坐标是:%d\n第二个坐标是:%d",searchIndexOfArr(numArr,num)[0],searchIndexOfArr(numArr,num)[1]);
        return 0;
    }
    

    答案不是最优的,也请各位不吝赐教,共同学习。。。

    版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

    相关文章

      网友评论

      • 新城旧少年:能分享一下你那个群吗
        CrazySteven:@新城旧少年 QQ群:610552898
      • KKKKUNG:我觉得函数里第一个循环最后是否找到符合要求的数那里,用if(result[0] >=0) 这样思路上应该更清晰吧,表示找到匹配的数了,最先创建好了result 这个数组后呢也可以不用赋值呀,显得多出一步运算,算法的能力理论上应该会降低吧,虽然肯定耗时很少可以忽略🤔。个人的愚见,我也只是一名刚入门的学生,前辈多多交流,看到你的每周一个算法专栏进来学习的。😁
        CrazySteven:创建不赋值在你的编辑器上是可行的,但是要提交到网上会出现问题,所以创建后赋值这是必须的。result[0]本身就是N,大于等于0,用if(result[0] >=0)的话需要改改代码。我就不改啦~:smile:

      本文标题:每周一道算法题(一)

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