പക്ഷെ ഒരു പ്രോബ്ലം സോൾവ് ചെയ്യുമ്പോൾ നമ്മുടെ ബ്രെയിൻ കൂടുതൽ സമയവും ചിലവഴിക്കുന്നത് ഐഡിയകളെ പരിഭാഷ ചെയ്യാൻ ആയിരിക്കും. പ്രത്യേകിച്ച് മലയാളായി ആയ എനിക്ക് ഇതൊരു പ്രശ്നമായി തോന്നിയിട്ടുണ്. ചില പ്രോബ്ലെംസ് സോൾവ് ചെയ്യുമ്പോൾ എനിക്ക് കൂടുതൽ വഴങ്ങുന്ന ഭാഷ അത് മലയാളം ആണ്.
ഉദാഹരണത്തിന് ഈ പ്രോബ്ലം നോക്കൂ.
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
If you look at Leetcode explanation the language barrier will become very evident in finding a solution to this problem.
നമുക്ക് ഒരു height array കൊടുത്തിട്ടുണ്ട്:
[0,1,0,2,1,0,1,3,2,1,2,1]
ഈ each number ഒരു bar ആണെന്ന് ചിന്തിക്കൂ. മഴ കഴിഞ്ഞശേഷം എത്ര units വെള്ളം ഈ structure trap ചെയ്യാമെന്ന് കാണണം.
🧠 അടിസ്ഥാന ആശയം:
ഒരു position-ൽ വെള്ളം trap ചെയ്യാൻ കഴിയുന്ന അളവ് =
min(Left-ൽ കാണുന്ന ഏറ്റവും വലിയ wall, Right-ൽ കാണുന്ന ഏറ്റവും വലിയ wall) - height[i]
ഒരു പൊസിഷനിൽ വെള്ളം നിറയണമെങ്കിൽ അതിന്റെ ഇടത്തേയും വലത്തേയും വാളുകളുടെ ഇടയിൽ ആയിരിക്കണം. ഉദാഹരണത്തിന് ഇടതു വശത്തെയോ വലതു വശത്തെയോ വാൾ വലുതായിരിക്കണം.
ഇടതു വശത്തെ വാളിന്റെ ഉയരം രണ്ടും വലതു വശത്തെ വാളിന്റെ ഉയരം മൂന്നും നടുക്ക് നിക്കുന്ന വാളിന്റെ ഉയരം ഒന്നും ആണെന്ന് സങ്കല്പിക്കുക. അപ്പോൾ നടുക്ക് നിക്കുന്ന ഭിത്തിക്ക് ഒരു യൂണിറ്റ് ഹോൾഡ് ചെയ്യാൻ പറ്റും. അതായത്
min(Left-ൽ കാണുന്ന ഏറ്റവും വലിയ wall, Right-ൽ കാണുന്ന ഏറ്റവും വലിയ wall) - height[i]
നമ്മൾ എവിടെയാണോ നിക്കുന്നത് ആ വാളിന്റെ ഉയരം അതിൽ നിന്നും കുറക്കേണ്ടിയിരിക്കുന്നു.
ചെറിയ മതിലാണ് വെള്ളത്തിന്റെ തടഞ്ഞു നിർത്തുന്നത്. അതിനെ ബേസ് ചെയ്താൽ നമ്മുക്ക് വളരെ എളുപ്പത്തിൽ ഇതിനൊരു നല്ല സൊല്യൂഷൻ കണ്ടുപിടിക്കാൻ പറ്റും.
🎯 ഒറ്റവാക്കിൽ പറഞ്ഞാൽ:
ഒരു വശത്ത് വലിയ മതിൽ ഉണ്ടെങ്കിൽ, നമ്മൾ ചെറിയ വാളിൽ നിന്നും അതിലേക്ക് നീങ്ങികൊണ്ടിരിക്കുക. നീങ്ങുന്ന വഴിക്ക് calculation ചെയ്യുക. ഓർക്കുക ഒരു ചെറിയ മതിലിനു മാത്രമേ വെള്ളം തടയാൻ പറ്റുകയുള്ളു.
രണ്ടു പോയിന്റർ ഉപയോഗിച് ഇത് ചെയ്യുമ്പോൾ നമ്മുക് ഒരു ഗ്യാരണ്ടി കിട്ടും അതായത് ഒരുവശത്ത് വലിയ മതിൽ ഉറപ്പായിട്ട് കാണുമ്പോൾ, മറ്റേ വശം വെറും limit ആണ്. കോഡിലെ ആദ്യത്തെ ഇഫ് കണ്ടിഷൻ ഈ ഗ്യാരണ്ടീ നമുക്ക് നൽകും
if (height[left] < height[right]) {
മുഴുവൻ കോഡും നിങ്ങൾക് താഴെ കാണാം
No comments:
Post a Comment