美文网首页
算法题两则

算法题两则

作者: 汴城码农 | 来源:发表于2023-06-22 20:11 被阅读0次

    第一题:
    数列前2项为 1 1,从第3项开始,若为奇数项,则值为前两项之和,若为偶数项,则值为前两项之和的2倍
    可知该数列前6项为 1 1 2 6 8 28
    求该数列的第n项
    请用递归和循环两种方式实现

    /**
    *递归
    */

    -(NSInteger)counts:(NSInteger)index{
        if(index == 1 || index == 2){
            return 1;
        }else if (index%2 == 0){
            return ([self counts:index-2] + [self counts:index-1])*2;
        }else if (index%2 == 1){
            return ([self counts:index-2] + [self counts:index-1]);
        }else{
            return 0;//输入0或者负数返回0
        }
    }
    

    /**
    *for 循环
    */

    -(NSInteger)numCounts:(NSInteger)index{
        NSMutableArray *array = @[].mutableCopy;
        
        for (int i = 1; i <= index; i++) {
            if(i == 1 || i == 2){
                [array addObject:1];
            }else if (index%2 == 0){
                NSInteger temp = (array[index-2] + array[index-1])*2;
                [array addObject:temp]
            }else if (index%2 == 1){
                NSInteger temp = (array[index-2] + array[index-1]);
                [array addObject:temp]
            }
        }
        return array.lastObject;
    }
    

    第二题:
    给定一个int型数组,找出其中大于0的数字中倒数第二小的数字的下标
    例如 1 -1 3 2 0,其中大于0的数字有1 3 2,倒数第二小的数字为2,其下标为3
    尽量不使用排序

    /**
    *遍历保存最大值和第二大值
    */

    -(NSString* )numCounts:(NSArray *)array{
        
        NSInteger temp_max = 0; //最大数
        NSInteger temp_max2 = 0;//第二大数
        NSInteger index_max = 0;//最大数下标
        NSInteger index_max2 = 0;//第二大数下标
        
        for (int i = 0; i < array.count; i++) {
            NSInteger obj = array[i];
            if (i==0) {
                index_max = i;
                index_max2 =i;
                temp_max = obj;
                temp_max2 =obj;
            }else{
                if (obj > temp_max) {
                    temp_max = obj;
                    index_max = i;
    
                }else if (obj > temp_max2){
                    temp_max2 =obj;
                    index_max2 =i;
                }
            }
        }
        
        if (temp_max2 <= 0) {
            return "倒数第二大值小于等于0,不满足题义";
        }
        
        return [NSString stringWithFormat:@"倒数第二大值为%d,下标为%d",temp_max2,index_max2];
    }
    

    相关文章

      网友评论

          本文标题:算法题两则

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