找出不在数组中的最小自然数

/**
 * 找出不在数组中的最小自然数
 *  规则:tree[i] = i+1{1,2,...,length}
 * @param tree
 * @return
 */
public int findMin(int[] tree) {
    
    
    int length = tree.length;
    for (int i = 0; i < length; i++) {
    
     // 用于维护规则
        while (tree[i] > 0 && tree[i] <= length && tree[tree[i] - 1] != tree[i]) {
    
    
            int temp = tree[tree[i] - 1];
            tree[tree[i] - 1] = tree[i];
            tree[i] = temp;
        }
    }

    for (int i = 0; i < length; i++) {
    
    
        if (tree[i] != i + 1) {
    
    
            return i + 1;
        }
    }
    return length + 1;
}

猜你喜欢

转载自blog.csdn.net/for62/article/details/108548038