Saya sedang memecahkan pertanyaan leetcode Merge Sorted Array dan saya mendapatkan kesalahan runtime saat menjalankan kode berikut pada leetcode

Diberikan dua larik bilangan bulat terurut nums1 dan nums2, gabungkan nums2 menjadi nums1 sebagai satu larik terurut. Jumlah elemen yang diinisialisasi dalam nums1 dan nums2 berturut-turut adalah m dan n. Anda dapat berasumsi bahwa nums1 memiliki ukuran yang sama dengan m + n sehingga memiliki cukup ruang untuk menampung elemen tambahan dari nums2.

Contoh 1: Masukan: bilangan1 = [1,2,3,0,0,0], m = 3, bilangan2 = [2,5,6], n = 3 Keluaran: [1,2,2,3,5 ,6]

Contoh 2: Masukan: bilangan1 = [1], m = 1, bilangan2 = [], n = 0 Keluaran: [1]

kode saya :

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int i = 0, j = 0, k = m-1;
    
    while(i<=k && j<m) {
        if(nums1[i] < nums2[j]) {
            i++;
        }
        else {
            swap(nums2[j++], nums1[k--]);
        }
    }
    sort(begin(nums1), begin(nums1) + m );
    sort(begin(nums2), end(nums2));
    
    k = m + 1;
    for(int l = 0; l < n; l++) {
        nums1[k] = nums2[l];
        k++;
    }
}
};
0
doggone_boy 10 Mei 2021, 16:28

1 menjawab

Jawaban Terbaik

Ini:

k = m + 1;

Membuatnya melewatkan slot di k[m] dan juga membuat for akses loop nums1 di luar batas karena k akan mencapai 6 dan nums1[6] adalah di luar batas.

Buatlah:

k = m;

Demo

Catatan: Kesalahan semacam ini mudah ditemukan jika Anda menggunakan debugger atau bahkan dengan menambahkan print out dalam kode Anda sehingga Anda dapat melihat nilai variabel indeks.

0
Ted Lyngmo 10 Mei 2021, 14:22