สมมติว่าเรามีจำนวนอาร์เรย์และเรียงลำดับแบบไม่ลดลง เราจะต้องสร้างอาร์เรย์ที่ชื่อว่า result โดยมีความยาวเท่ากับ num ดังนั้น result[i] คือผลรวมของความแตกต่างแบบสัมบูรณ์ระหว่าง nums[i] และองค์ประกอบอื่นๆ ทั้งหมดในอาร์เรย์
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[5,7,12] ผลลัพธ์จะเป็น [9, 7, 12] เพราะ
- |5-5| + |5-7| + |5-12| =0+2+7 =9
- |7-5| + |7-7| + |7-12| =2+0+5 =7
- |5-12| + |7-12| + |12-12| =7+5+0 =12
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- res :=รายการใหม่
- s:=0
- n :=ขนาดของ nums
- สำหรับฉันในช่วง 1 ถึง n - 1 ทำ
- s :=s + nums[i] - nums[0]
- ใส่ s ต่อท้าย res
- สำหรับฉันในช่วง 1 ถึง n - 1 ทำ
- diff :=nums[i] - nums[i-1]
- s :=s + diff*i
- s :=s - diff *(n-i)
- ใส่ s ต่อท้าย res
- ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums): res = [] s=0 n = len(nums) for i in range(1,n): s+=nums[i]-nums[0] res.append(s) for i in range(1,n): diff = nums[i]-nums[i-1] s += diff*i s -= diff *(n-i) res.append(s) return res nums = [5,7,12] print(solve(nums))
อินพุต
[5,7,12]
ผลลัพธ์
[9, 7, 12]