मान लीजिए कि हमारे पास nums1 और nums2 नामक दो सरणियाँ हैं, उनके पास तत्वों की संख्या समान है। अब एक सेट S पर विचार करें जिसमें 1 से N तक N तत्व हैं। हमें (nums1[i1] + nums1[i2] + का मान ज्ञात करना है। .. nums1[ik])^2 + (nums2[i1] + nums2[i2] + ... nums2[ik])^2 जहां {i1, i2, ... ik} सेट एस का खाली उपसमुच्चय नहीं है ।
इसलिए, यदि इनपुट nums1 =[-1, 6] nums2 =[5, 4] जैसा है, तो आउटपुट 106 होगा क्योंकि
- (-1)^2 + (5)^2 =26
- (6)^2 + (4)^2 =50
- (-1 + 6)^2 + (5 + 4)^2 =106
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- बनाम :=जोड़े की एक सूची (nums1[i], nums2[i]) प्रत्येक i के लिए 0 से लेकर nums1 - 1 के आकार तक के लिए
- बनाम :=सॉर्ट बनाम टैन-व्युत्क्रम v[1]/v[0] प्रत्येक वी बनाम बनाम के लिए
- सर्वश्रेष्ठ:=0
- मैं के लिए 0 से बनाम -1 के आकार के बीच में, करते हैं
- यू:=बनाम[i]
- l :=u[0]*u[0]+u[1]*u[1]
- बनाम और बनाम की संक्षिप्त सूची में प्रत्येक v के लिए इंडेक्स i+1 से (i+ आकार बनाम -1) तक, करें
- t1 :=(u[0]+v[0], u[1]+v[1])
- t2 :=t1[0]*t1[0]+t1[1]*t1[1]
- यदि t2>=l, तो
- यू :=t1
- l :=t2
- अगर l> सबसे अच्छा, तो
- सर्वश्रेष्ठ:=एल
- यू:=बनाम[i]
- l :=u[0]*u[0]+u[1]*u[1]
- प्रत्येक v के लिए बनाम बनाम बनाम की संक्षिप्त सूची को फिर से इंडेक्स i+1 से i+ बनाम -1 के आकार में उलट दें], करें
- t1 :=(u[0]+v[0], u[1]+v[1])
- t2 :=t1[0]*t1[0]+t1[1]*t1[1]
- यदि t2>=l, तो
- यू :=t1
- l :=t2
- अगर l> सबसे अच्छा, तो
- सर्वोत्तम वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import atan2 def solve(nums1, nums2): vs = zip(nums1,nums2) vs = sorted(vs, key=lambda v: atan2(v[1],v[0])) best = 0 for i in range(len(vs)): u = vs[i] l = u[0]*u[0]+u[1]*u[1] for v in (vs+vs)[i+1:(i+len(vs))]: t1 = (u[0]+v[0],u[1]+v[1]) t2 = t1[0]*t1[0]+t1[1]*t1[1] if t2 >= l: u = t1 l = t2 if l > best: best = l u = vs[i] l = u[0]*u[0]+u[1]*u[1] for v in reversed((vs+vs)[i+1:(i+len(vs))]): t1 = (u[0]+v[0],u[1]+v[1]) t2 = t1[0]*t1[0]+t1[1]*t1[1] if t2 >= l: u = t1 l = t2 if l > best: best = l return best nums1 = [-1, 6] nums2 = [5, -4] print(solve(nums1, nums2))
इनपुट
[-1, 6], [5, -4]
आउटपुट
52