मान लीजिए कि हमारे पास एक बाइनरी सूची है जिसे nums कहा जाता है जिसमें केवल 0s और 1s होते हैं जहां 0 खाली सेल को इंगित करता है और 1 इंगित करता है कि सेल एक गेंद से भरा हुआ है। हमें मान L की एक नई सूची ढूंढनी है, जिसका आकार भी अंकों के आकार के समान है, जहां L[i] सभी गेंदों को L[i] पर ले जाने के लिए आवश्यक कुल दूरी पर सेट है। यहाँ एक गेंद को सूचकांक j से सूचकांक i तक ले जाने की दूरी है |j - i|.
इसलिए, यदि इनपुट nums =[1, 1, 0, 1] जैसा है, तो आउटपुट [4, 3, 4, 5] होगा, क्योंकि
- एल[0] =|0 - 0| + |1 - 0| + |3 - 0|
- एल[1] =|0 - 1| + |1 - 1| + |3 - 1|
- एल[2] =|0 - 2| + |1 - 2| + |3 - 2|
- एल[3] =|0 - 3| + |1 - 3| + |3 - 3|
इसलिए, सभी गेंदों को L[1] पर ले जाने के लिए हमें गेंद को इंडेक्स 0 से 1 की दूरी 1 के साथ ले जाना होगा और गेंद को इंडेक्स 3 से 1 की दूरी 2 के साथ ले जाना होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि अंक खाली हैं, तो
- एक नई सूची लौटाएं
- बाएं_गिनती :=0
- right_count :=0
- बाएं_योग:=0
- right_sum :=0
- परिणाम:=एक नई सूची
- प्रत्येक अनुक्रमणिका और अंकों में मान संख्या के लिए, करें
- यदि संख्या शून्य नहीं है, तो
- right_count :=right_count + 1
- right_sum :=right_sum + index
- यदि संख्या शून्य नहीं है, तो
- प्रत्येक अनुक्रमणिका और अंकों में मान संख्या के लिए, करें
- परिणाम के अंत में (बाएं_योग + दायां_योग) डालें
- यदि संख्या शून्य नहीं है, तो
- right_count :=right_count - 1
- बाएं_गिनती :=बाएं_गिनती + 1
- बाएं_योग :=बायां_योग + बायां_गिनती
- right_sum :=right_sum - right_count
- वापसी का परिणाम
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(nums): if not nums: return [] left_count = right_count = 0 left_sum = right_sum = 0 result = [] for index, num in enumerate(nums): if num: right_count += 1 right_sum += index for index, num in enumerate(nums): result.append(left_sum + right_sum) if num: right_count -= 1 left_count += 1 left_sum += left_count right_sum -= right_count return result nums = [1, 1, 0, 1] print(solve(nums))
इनपुट
[1, 1, 0, 1]
आउटपुट
[4, 3, 4, 5]