Re: [北美] Microsoft questions

看板Oversea_Job (海外工作)作者時間17年前 (2007/12/16 01:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《HYL.bbs@ptt.cc (@Seattle)》之銘言: : ※ 引述《LINC.bbs@ptt3.cc (Go cubs!)》之銘言: : : Given 2 sorted arrays, a[] and b[] : : combine them with no extra array(or linear space). : : e.g.: a[10] = [1, 3, 5, 7, 9] : : b[3] = [2, 4, 6] : : the result is a[] = [1, 2, 3, 4, 5, 6, 7, 9], assuming a[] has enough space. : : Can anyone solve it? I don't see a good solution(meaning O(N)) yet. : 反過來走如何? : int apos = 4; : int bpos = 2; : for(int i = a.length -1 ; i >= 0 ; i--){ : if(apos < 0){ : a[i] = b[bpos]; : bpos --; : }else if(bpos <0){ : a[i] = a[apos]; : apos --; : }else if(a[apos] >= b[bpos]){ : a[i] = a[apos]; : apos --; : } else { : a[i] = b[bpos]; : bpos --; : } : } : 試過幾個edge case都沒問題,這應該就是O(n)的一個解答了 我沒有寫的很清楚 不過這個題目有個隱含的事實 就是: a[]的長度 >= # elements in a[] + # elements in b[] 在我的例子裡, a[]的長度為10, 但是一共只有8個elements(5 in a[], 3 in b[]) 所以你的code裡要修改一下 i 就會沒問題 -- ※ 發信站: 批踢踢參(ptt3.cc) ◆ From: 151.199.225.228
文章代碼(AID): #17P1B500 (Oversea_Job)
討論串 (同標題文章)
文章代碼(AID): #17P1B500 (Oversea_Job)