You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归查找整数向量中最小正整数的函数实现问题

完善递归查找最小正整数的函数

先看看你写的不完整代码片段:

#include <vector> 
using namespace std; 

int rec_min_pos(const vector<int> & nums, int size) { 
    if (size < 1) { 
        return -1; 
    } else { 
        int min = rec_min_pos(nums, size - 1); 
        if(min < 0){ 
            if(nums[size - 1] <= 0){ 
                return -1; 
            }else{ 
                return nums[size-1]; 
            } 
        }else { 
            if (min < nums[size - 1]) { 
                return min; 
            } else { 
                return nums[size -...
        }
    }
}

你的核心逻辑方向是对的,但在处理当前元素为非正整数的情况时遗漏了分支,而且比较前没判断当前元素是否是正整数(如果当前元素是负数,没必要和已有的最小正整数比较)。下面是完整的修正版代码:

#include <vector>
using namespace std;

int rec_min_pos(const vector<int>& nums, int size) {
    // 基线条件:没有元素时返回-1(表示无正整数)
    if (size < 1) {
        return -1;
    }

    // 递归查找前size-1个元素的最小正整数
    int prev_min = rec_min_pos(nums, size - 1);
    // 当前待检查的元素(注意vector下标从0开始)
    int current = nums[size - 1];

    // 情况1:前面的元素里没有正整数
    if (prev_min < 0) {
        return current > 0 ? current : -1;
    }
    // 情况2:前面已经找到最小正整数
    else {
        // 如果当前元素是正整数,就和前面的最小值比较取更小的
        if (current > 0) {
            return min(prev_min, current);
        }
        // 如果当前元素是非正的,直接返回前面的最小值即可
        else {
            return prev_min;
        }
    }
}

关键逻辑解释:

  • 基线条件:当size小于1时,说明没有元素需要检查,返回-1作为“无正整数”的标记
  • 递归拆解:每次只处理最后一个元素,把前面的元素交给递归调用处理
  • 分支处理:
    • 若前面没有找到正整数,只需要判断当前元素是否为正,是则返回它,否则继续返回-1
    • 若前面已经有最小正整数,只有当前元素是正整数时才需要比较,非正元素直接忽略

测试案例参考:

  1. 输入nums = {-5, 3, 2, -1},调用rec_min_pos(nums, 4),返回2
  2. 输入nums = {-3, -1, -7},调用rec_min_pos(nums, 3),返回-1
  3. 输入nums = {5},调用rec_min_pos(nums, 1),返回5

内容的提问来源于stack exchange,提问作者Florian Humblot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:14:42