倒序合并数组的输出问题

  • 练习 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;

}

【以下回答由 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函数,以正确输出合并后的结果。

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



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

其实就是插入排序的变形

#include <iostream>
#include <vector>
using namespace std;
void usersort(vector<int>& nums1, vector<int>& nums2) {
        int n=nums2.size();
        int m=nums1.size()-n;
        for (int i = 0; i < n; i++) {
                int k=nums2[i];
                int j=m+i;
                while (j > 0) {
                        if(nums1[j-1]>k){
                                nums1[j]=nums1[j-1];
                                j--;                        
                        }
                        else {
                                break;
                        }
                        
                }
                nums1[j]=k;
        }
}
int main(){
        vector<int>nums1={1,2,3,0,0,0};
        vector<int> nums2={2,5,6};
        usersort(nums1,nums2);
        for(auto& c : nums1)
                cout<<c<<endl;

}

排序代码根本是错的,你在练习 leetcode ?你别扯了,你根本就是用 GPT 糊弄自己呢。

你把没排序的nums1 和 nums2 各输出一次,问题可能出在这里