मान लीजिए कि हमारे पास कुछ चट्टानें हैं, प्रत्येक चट्टान का एक धनात्मक पूर्णांक भार है। प्रत्येक मोड़ में, हम दो सबसे भारी चट्टानें लेंगे और उन्हें एक साथ तोड़ देंगे। मान लें कि पत्थरों का वजन x और y और x <=y है। इस स्मैश का परिणाम दो प्रकार का हो सकता है।
- यदि x =y, तो दोनों पत्थर पूरी तरह नष्ट हो जाते हैं;
- अन्यथा जब x !=y, वजन x का पत्थर पूरी तरह से नष्ट हो जाता है, और वजन y के पत्थर का वजन y-x हो जाता है।
अंत में, ज़्यादा से ज़्यादा 1 पत्थर बचा है। हमें इस पत्थर का वजन ज्ञात करना है (जब कोई पत्थर नहीं बचा हो।)
तो अगर पत्थर के वजन [2,7,4,1,8,1] हैं, तो परिणाम 1 होगा। पहले 7 और 8 का चयन करें, फिर 1 प्राप्त करें, तो सरणी [2,4,1,1] होगी ,1], दूसरा 2 और 4 लें। सरणी [2,1,1,1] होगी, उसके बाद 2 और 1 का चयन करें, सरणी [1,1,1] होगी, फिर वजन 1 के साथ दो पत्थरों का चयन करें, तो दोनों नष्ट हो जाएंगे, इसलिए सरणी [1] होगी। यह उत्तर है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अगर स्टोन वेट ऐरे W में कोई एलिमेंट नहीं है, तो 0 पर लौटें
- यदि W में केवल एक तत्व है तो W[0] को वापस कर दें
- जबकि W में एक से अधिक तत्व हैं -
- सॉर्ट डब्ल्यू
- s1:=W का अंतिम तत्व, s2:=W का दूसरा अंतिम तत्व
- अगर s1 =s2, तो s1 और s2 को W से हटा दें
- अन्यथा s1 :=|s1 – s2|, W से अंतिम तत्व निकालें, फिर s1 को W के अंतिम तत्व के रूप में सेट करें
- यदि W में एक तत्व है, तो उस तत्व को वापस कर दें, अन्यथा 0 लौटा दें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution(object): def lastStoneWeight(self, stones): """ :type stones: List[int] :rtype: int """ if len(stones) ==0: return 0 if len(stones) == 1: return 1 while len(stones)>1: stones.sort() s1,s2=stones[-1],stones[-2] if s1==s2: stones.pop(-1) stones.pop(-1) else: s1 = abs(s1-s2) stones.pop(-1) stones[-1] = s1 if len(stones): return stones[-1] return 0 ob1 = Solution() print(ob1.lastStoneWeight([2,7,4,1,6,1]))
इनपुट
[2,7,4,1,6,1]
आउटपुट
1