สมมติว่าเราได้รับอาร์เรย์และขอให้ทำการเรียงลำดับการแทรก ในการเรียงลำดับการแทรก แต่ละองค์ประกอบในอาร์เรย์จะเลื่อนไปยังตำแหน่งที่ถูกต้องในอาร์เรย์ เราต้องหาจำนวนกะทั้งหมดที่จำเป็นในการจัดเรียงอาร์เรย์ จำนวนการเปลี่ยนแปลงทั้งหมดเป็นตัวเลขจำนวนเต็ม และหากจัดเรียงอาร์เรย์แล้ว เราจะคืนค่า 0
ดังนั้น หากอินพุตเป็นเหมือน input_array =[4, 5, 3, 1, 2] เอาต์พุตจะเป็น 8
<ก่อน>[4, 5, 3, 1, 2] =0 กะ[4, 5, 3, 1, 2] =0 กะ[3, 4, 5, 1, 2] =2 กะ[1, 3, 4, 5, 2] =3 กะ[1, 2, 3, 4, 5] =3 กะจำนวนกะทั้งหมด =0 + 0 + 2 + 3 + 3 =8.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ความยาว :=ขนาดของ input_arr
- temp_arr :=รายการขนาดใหม่ 1000001 เริ่มต้นด้วย 0s
- ตอบ :=0
- สำหรับแต่ละรายการใน input_arr ทำ
- val :=item
- ในขณะที่ val> 0, ทำ
- ans :=ans + temp_arr[val]
- val :=val - (val AND -val)
- val :=item
- ในขณะที่วาล <=1000000 ทำ
- temp_arr[val] :=temp_arr[val] + 1
- val :=val + (val AND -val)
- ans :=length * (ค่าพื้นของ (ความยาว - 1) / 2) - ans
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def Solve(input_arr):length =len(input_arr) temp_arr =[0] * 1000001 ans =0 สำหรับรายการใน input_arr:val =รายการในขณะที่ val> 0:ans +=temp_arr[val] val -=val &-val val =รายการในขณะที่ val <=1000000:temp_arr[val] =temp_arr[val] + 1 val +=val &-val ans =ความยาว * (ความยาว - 1) // 2 - ans ส่งคืน ansprint([4 , 5, 3, 1, 2]))
อินพุต
[4, 5, 3, 1, 2]
ผลลัพธ์
8