(合并两个有序数组)这个程序为什么奔了?

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

class Solution {
public:
    vector<int>::iterator find_pos(vector<int> nums1,int t) {
        int i = 0;
        while (nums1[i] <= t) {
            i++;
        }
        return  nums1.begin() + i;
    }

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        
        for (int i = 0; i < n; i++) {
            nums1.insert(find_pos(nums1, nums2[i]), nums2[i]);
        }

    }
};



int main() {
    vector<int> n1 = { 1,2,3,0,0,0 };
    vector<int> n2 = { 2,5,6 };
    Solution s;
    s.merge(n1, 3, n2, 3);

    for (int i = 0; i < 6; i++) {
        cout << n1[i] << endl;
    }

    return 0;
}

 

如果是要将2个有序数组合并成新的有序数组,稍作修改即可

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
	int find_pos(vector<int> nums1, int t) {
		int i = 0;
		while (nums1[i] <= t && nums1[i]!=0) {
			i++;
		}
		return i;
	}
	void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
		for (int i = 0; i < n; i++) {
			//nums1.insert(nums1.begin() + m + i, nums2[i]);
			int index  = find_pos(nums1, nums2[i]);
			nums1.insert(nums1.begin()+index, nums2[i]);
		}
	}
};

int main() {
	vector<int> n1 = { 1,2,3,0,0,0 };
	vector<int> n2 = { 2,5,6 };
	Solution s;
	s.merge(n1, 3, n2, 3);
	for (int i = 0; i < 6; i++) {
		cout << n1[i] << endl;
	}
	return 0;
}

注意第8行,当你查找n2第二个值5的位置,你会发现n1没有比5大的了,最后while循环得到的i已经超出n1数组的范围了,结果也不是你想要的。

这里就多加一个判断把第一个0作为结尾的位置。

 

 

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
	vector<int>::iterator find_pos(vector<int> nums1, int t) {
		int i = 0;
		while (nums1[i] <= t) {
			i++;
		}
		return  nums1.begin() + i;
	}
	void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
		for (int i = 0; i < n; i++) {
			nums1.insert(nums1.begin() + m + i, nums2[i]);
		}
	}
};

int main() {
	vector<int> n1 = { 1,2,3,0,0,0 };
	vector<int> n2 = { 2,5,6 };
	Solution s;
	s.merge(n1, 3, n2, 3);
	for (int i = 0; i < 6; i++) {
		cout << n1[i] << endl;
	}
	return 0;
}

只是要合并2个数组的话,这里用不上find_pos。

改了一下第18行的代码,供你参考。

 

 

还有问题可以评论问我或者私信。