int prev[100005] 紀錄各個數字前一次出現的index
從左邊和右邊各掃過取min就是答案了
時間複雜度:O(n)
int prev[100005] 紀錄各個數字前一次出現的index 從左邊和右邊各掃過取min就是答案了 時間複雜度:O(n)
是下面的陣列還是上面的阿 看不太懂 怎麼找index阿 不是還要用lower_bound嗎
for(int i = 0; i < n; ++i) { prev[b[i]] = i; if(prev[a[i]] != -1) { ans[i] = min(ans[i], abs(i - prev[a[i]])); } }
不需要用到lower_bound找位置 這樣複雜度少一個log(n)
for(int i = 0; i < n; ++i) { prev[b[i]] = i; if(prev[a[i]] != -1) { ans[i] = min(ans[i], abs(i - prev[a[i]])); } } 不需要用到lower_bound找位置 這樣複雜度少一個log(n)
哦 受教了 感謝大大分享