Schrieffer.zsy 2021-04-16 22:48 采纳率: 93.8%
浏览 40
已采纳

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

#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;
}
  • 写回答

1条回答 默认 最新

  • 猫叔大鸭梨 2021-04-16 23:44
    关注

    如果是要将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行的代码,供你参考。

     

     

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路