和光玉子 2023-08-23 16:00 采纳率: 66.7%
浏览 22
已结题

倒序合并数组的输出问题

  • 练习 leetcode 的题目时想在本地输出,写了如下代码,合并排序的函数时没问题的,但是输出的结果不正确,仅仅把nums1的元素进行了排序,有没有人可以指出我的问题!感谢!

img

img

#include <iostream>
#include <vector>
using namespace std;

/*
* 定义数组合并排序函数
* 定义两个指针数组,倒序遍历并插入比较后的元素
*/
vector<int> sort_array(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int len1 = m - 1, len2 = n - 1, len = m + n - 1;

    while (len1 >= 0 && len2 >= 0) {
        nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
    }
    while (len2 >= 0) {
        nums1[len--] = nums2[len2--];
    }
    return nums1;
}

//定义数组输出函数
void print_array(vector<int>& nums1, int len) {

    for (unsigned int i = 0; i < len; ++i){
        cout << nums1[i] << " ";
    }
}

int main() {
    int m , n;
    int i = 0;
    vector<int> nums1(10);
    vector<int> nums2(10);

    cout << "nums1 = ";
    do {
        cin >> nums1[i];
        i++;
    } while (cin.get() != '\n');
    cout << "m = ";
    cin >> m;

    cout << "nums2 = ";
    do {
        cin >> nums2[i];
        i++;
    } while (cin.get() != '\n');
    cout << "n = ";
    cin >> n;

    int len = m + n;
    sort_array(nums1, m, nums2, n);
    print_array(nums1, len);

    return 0;

}
  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-23 18:41
    关注

    【以下回答由 GPT 生成】

    在触发"问题标题: 倒序合并数组的输出问题"的问题标签leedcode下,你给出了一个问题,并且提供了与问题相关的代码。

    你的目标是将nums1nums2两个数组进行合并,并按照倒序的方式输出结果。

    在分析你的代码后,我发现你的代码逻辑是正确的,对数组进行了合并排序。所以,我认为问题可能出现在读取输入和输出结果的部分。

    以下是我对代码进行修改后的建议:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    vector<int> sort_array(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int len1 = m - 1, len2 = n - 1, len = m + n - 1;
    
        while (len1 >= 0 && len2 >= 0) {
            nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
        }
        while (len2 >= 0) {
            nums1[len--] = nums2[len2--];
        }
        return nums1;
    }
    
    void print_array(vector<int>& nums1) {
        for (int i = 0; i < nums1.size(); ++i){
            cout << nums1[i] << " ";
        }
        cout << endl;
    }
    
    int main() {
        int m, n;
        vector<int> nums1, nums2;
    
        cout << "nums1: ";
        while (cin >> m) {
            nums1.push_back(m);
            if (cin.get() == '\n') {
                break;
            }
        }
    
        cout << "nums2: ";
        while (cin >> n) {
            nums2.push_back(n);
            if (cin.get() == '\n') {
                break;
            }
        }
    
        vector<int> merged = sort_array(nums1, nums1.size(), nums2, nums2.size());
        cout << "Merged array: ";
        print_array(merged);
    
        return 0;
    }
    

    我对代码做了以下修改: - 在print_array函数中,我修改了循环的终止条件,使用nums1.size()作为循环的结束条件,这样可以避免遍历超出数组长度的问题。 - 在main函数中,我修改了输入的方式。使用了cin >> mcin >> n来获取数组元素,而不是使用cin.get()获取字符。这样可以确保正确获取用户的输入。 - 在main函数中,我修改了print_array函数的调用,将merged数组传递给print_array函数,以正确输出合并后的结果。

    请问,这解决了您遇到的问题吗?如果还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 创建了问题 8月23日