[{"data":1,"prerenderedAt":500},["ShallowReactive",2],{"\u002Fblog\u002Fcode-log-day-9":3},{"id":4,"title":5,"author":6,"body":7,"date":486,"description":487,"draft":488,"extension":489,"image":490,"language":491,"meta":492,"navigation":143,"path":493,"seo":494,"stem":495,"tags":496,"__hash__":499},"blog\u002Fblog\u002FCode Log - Day 9.md","Code Log - Day 9","Caio Prado",{"type":8,"value":9,"toc":481},"minimark",[10,15,27,32,48,93,115,361,373,477],[11,12,14],"h2",{"id":13},"log","Log",[16,17,18,19,26],"p",{},"Today i solved a LeetCode exercise from the ",[20,21,25],"a",{"href":22,"rel":23},"https:\u002F\u002Fleetcode.com\u002Fstudyplan\u002Ftop-interview-150\u002F",[24],"nofollow","Top 150 Interview Questions"," list.",[28,29,31],"h3",{"id":30},"leetcode","LeetCode",[16,33,34,35,39,40,43,44,47],{},"The LeetCode exercise i chose was: Merge Sorted Array.\nIt requires a function that receive as input two integer arrays and their the number of occupied positions in each of them to merge the arrays into the first array, which has ",[36,37,38],"code",{},"m"," items and length of ",[36,41,42],{},"m + n",", with ",[36,45,46],{},"n"," being the length of the second array :",[49,50,51],"blockquote",{},[16,52,53,54,57,58,61,62,66,67,57,69,71,72,57,74,76,77,80,81,57,83,85,86,88,89,92],{},"You are given two integer arrays ",[36,55,56],{},"nums1"," and ",[36,59,60],{},"nums2",", sorted in ",[63,64,65],"strong",{},"non-decreasing order",", and two integers ",[36,68,38],{},[36,70,46],{},", representing the number of elements in ",[36,73,56],{},[36,75,60],{}," respectively. ",[63,78,79],{},"Merge"," ",[36,82,56],{},[36,84,60],{}," into a single array sorted in ",[63,87,65],{},". ...with an algorithm that runs in ",[36,90,91],{},"O(m + n)"," time?",[16,94,95,96,99,100,102,103,105,106,108,109,111,112,114],{},"My first approach was to create a new array ",[36,97,98],{},"merge"," and then loop through ",[36,101,56],{}," and ",[36,104,60],{}," comparing their items to insert into the ",[36,107,98],{}," array in a non-decreasing order; after this, the items in the ",[36,110,98],{}," would get stored into ",[36,113,56],{},":",[116,117,122],"pre",{"className":118,"code":119,"language":120,"meta":121,"style":121},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class Solution {\n    public void merge(int[] nums1, int m, int[] nums2, int n) {\n\n        if ((m == 0 && n == 0) || (m != 0 && n==0) ) return;\n        if (m == 0 && n != 0) {\n            for(int i = 0; i \u003C nums1.length; i++)\n                nums1[i] = nums2[i];\n            return;\n        }\n\n        int[] merged = new int[nums1.length];\n        int j = 0; \u002F\u002F nums1 index\n        int k = 0; \u002F\u002F nums2 index\n\n        for(int i = 0; i \u003C nums1.length; i++){\n           if(j \u003C m && k \u003C n){\n                if(nums1[j] \u003C= nums2[k]){\n                    merged[i] = nums1[j];\n                    j++;\n                    continue;\n                } else {\n                    merged[i] = nums2[k];\n                    k++;\n                    continue;\n                }\n           } else if(j \u003C m && k == n) {\n                merged[i] = nums1[j];\n                j++;\n                continue;\n           } else if(j == m && k \u003C n) {\n                merged[i] = nums2[k];\n                k++;\n                continue;\n           }\n\n        }\n        for(int i = 0; i \u003C nums1.length; i++)\n            nums1[i] = merged[i];\n    }\n}\n","java","",[36,123,124,132,138,145,151,157,163,169,175,181,186,192,198,204,209,215,221,227,233,239,245,251,257,263,268,274,280,286,292,298,304,310,316,321,327,332,337,343,349,355],{"__ignoreMap":121},[125,126,129],"span",{"class":127,"line":128},"line",1,[125,130,131],{},"class Solution {\n",[125,133,135],{"class":127,"line":134},2,[125,136,137],{},"    public void merge(int[] nums1, int m, int[] nums2, int n) {\n",[125,139,141],{"class":127,"line":140},3,[125,142,144],{"emptyLinePlaceholder":143},true,"\n",[125,146,148],{"class":127,"line":147},4,[125,149,150],{},"        if ((m == 0 && n == 0) || (m != 0 && n==0) ) return;\n",[125,152,154],{"class":127,"line":153},5,[125,155,156],{},"        if (m == 0 && n != 0) {\n",[125,158,160],{"class":127,"line":159},6,[125,161,162],{},"            for(int i = 0; i \u003C nums1.length; i++)\n",[125,164,166],{"class":127,"line":165},7,[125,167,168],{},"                nums1[i] = nums2[i];\n",[125,170,172],{"class":127,"line":171},8,[125,173,174],{},"            return;\n",[125,176,178],{"class":127,"line":177},9,[125,179,180],{},"        }\n",[125,182,184],{"class":127,"line":183},10,[125,185,144],{"emptyLinePlaceholder":143},[125,187,189],{"class":127,"line":188},11,[125,190,191],{},"        int[] merged = new int[nums1.length];\n",[125,193,195],{"class":127,"line":194},12,[125,196,197],{},"        int j = 0; \u002F\u002F nums1 index\n",[125,199,201],{"class":127,"line":200},13,[125,202,203],{},"        int k = 0; \u002F\u002F nums2 index\n",[125,205,207],{"class":127,"line":206},14,[125,208,144],{"emptyLinePlaceholder":143},[125,210,212],{"class":127,"line":211},15,[125,213,214],{},"        for(int i = 0; i \u003C nums1.length; i++){\n",[125,216,218],{"class":127,"line":217},16,[125,219,220],{},"           if(j \u003C m && k \u003C n){\n",[125,222,224],{"class":127,"line":223},17,[125,225,226],{},"                if(nums1[j] \u003C= nums2[k]){\n",[125,228,230],{"class":127,"line":229},18,[125,231,232],{},"                    merged[i] = nums1[j];\n",[125,234,236],{"class":127,"line":235},19,[125,237,238],{},"                    j++;\n",[125,240,242],{"class":127,"line":241},20,[125,243,244],{},"                    continue;\n",[125,246,248],{"class":127,"line":247},21,[125,249,250],{},"                } else {\n",[125,252,254],{"class":127,"line":253},22,[125,255,256],{},"                    merged[i] = nums2[k];\n",[125,258,260],{"class":127,"line":259},23,[125,261,262],{},"                    k++;\n",[125,264,266],{"class":127,"line":265},24,[125,267,244],{},[125,269,271],{"class":127,"line":270},25,[125,272,273],{},"                }\n",[125,275,277],{"class":127,"line":276},26,[125,278,279],{},"           } else if(j \u003C m && k == n) {\n",[125,281,283],{"class":127,"line":282},27,[125,284,285],{},"                merged[i] = nums1[j];\n",[125,287,289],{"class":127,"line":288},28,[125,290,291],{},"                j++;\n",[125,293,295],{"class":127,"line":294},29,[125,296,297],{},"                continue;\n",[125,299,301],{"class":127,"line":300},30,[125,302,303],{},"           } else if(j == m && k \u003C n) {\n",[125,305,307],{"class":127,"line":306},31,[125,308,309],{},"                merged[i] = nums2[k];\n",[125,311,313],{"class":127,"line":312},32,[125,314,315],{},"                k++;\n",[125,317,319],{"class":127,"line":318},33,[125,320,297],{},[125,322,324],{"class":127,"line":323},34,[125,325,326],{},"           }\n",[125,328,330],{"class":127,"line":329},35,[125,331,144],{"emptyLinePlaceholder":143},[125,333,335],{"class":127,"line":334},36,[125,336,180],{},[125,338,340],{"class":127,"line":339},37,[125,341,342],{},"        for(int i = 0; i \u003C nums1.length; i++)\n",[125,344,346],{"class":127,"line":345},38,[125,347,348],{},"            nums1[i] = merged[i];\n",[125,350,352],{"class":127,"line":351},39,[125,353,354],{},"    }\n",[125,356,358],{"class":127,"line":357},40,[125,359,360],{},"}\n",[16,362,363,364,366,367,372],{},"This works, but there are too many lines of code and there is the need of an extra array. So i found this solution where it takes advantage of the fact that both of the arrays are sorted and the items can easily be inserted at the end of ",[36,365,56],{},". It can be found ",[20,368,371],{"href":369,"rel":370},"https:\u002F\u002Fleetcode.com\u002Fproblems\u002Fmerge-sorted-array\u002Fsolutions\u002F3436053\u002Fbeats-100-best-c-java-python-and-javascript-solution-two-pointer-stl\u002F?envType=study-plan-v2&envId=top-interview-150",[24],"here",".",[116,374,376],{"className":118,"code":375,"language":120,"meta":121,"style":121},"class Solution {\n    public void merge(int[] nums1, int m, int[] nums2, int n) {\n        int i = m - 1;                              \u002F\u002F tracks nums1 items index\n        int j = n - 1;                              \u002F\u002F tracks nums2 items index\n        int k = m + n - 1;                          \u002F\u002F tacks next index to insert at nums1\n\n        while (j >= 0) {                            \u002F\u002F finished looping through nums2?\n                                                    \u002F\u002F nums1 m items still need to get checked\n                                                    \u002F\u002F and item at nums1[i] bigger than nums2[j]\n            if (i >= 0 && nums1[i] > nums2[j]) {\n                                                    \u002F\u002F moves the item at nums1[i] to nums1[k]\n                                                    \u002F\u002F decrement k and i by 1\n                nums1[k--] = nums1[i--];\n            } else {                                \u002F\u002F nums1 0 items need to get checked\n                                                    \u002F\u002F moves the item at nums2[j] to nums1[k]\n                                                    \u002F\u002F decrement k and j by 1\n                nums1[k--] = nums2[j--];\n            }\n        }\n    }\n}\n",[36,377,378,382,386,391,396,401,405,410,415,420,425,430,435,440,445,450,455,460,465,469,473],{"__ignoreMap":121},[125,379,380],{"class":127,"line":128},[125,381,131],{},[125,383,384],{"class":127,"line":134},[125,385,137],{},[125,387,388],{"class":127,"line":140},[125,389,390],{},"        int i = m - 1;                              \u002F\u002F tracks nums1 items index\n",[125,392,393],{"class":127,"line":147},[125,394,395],{},"        int j = n - 1;                              \u002F\u002F tracks nums2 items index\n",[125,397,398],{"class":127,"line":153},[125,399,400],{},"        int k = m + n - 1;                          \u002F\u002F tacks next index to insert at nums1\n",[125,402,403],{"class":127,"line":159},[125,404,144],{"emptyLinePlaceholder":143},[125,406,407],{"class":127,"line":165},[125,408,409],{},"        while (j >= 0) {                            \u002F\u002F finished looping through nums2?\n",[125,411,412],{"class":127,"line":171},[125,413,414],{},"                                                    \u002F\u002F nums1 m items still need to get checked\n",[125,416,417],{"class":127,"line":177},[125,418,419],{},"                                                    \u002F\u002F and item at nums1[i] bigger than nums2[j]\n",[125,421,422],{"class":127,"line":183},[125,423,424],{},"            if (i >= 0 && nums1[i] > nums2[j]) {\n",[125,426,427],{"class":127,"line":188},[125,428,429],{},"                                                    \u002F\u002F moves the item at nums1[i] to nums1[k]\n",[125,431,432],{"class":127,"line":194},[125,433,434],{},"                                                    \u002F\u002F decrement k and i by 1\n",[125,436,437],{"class":127,"line":200},[125,438,439],{},"                nums1[k--] = nums1[i--];\n",[125,441,442],{"class":127,"line":206},[125,443,444],{},"            } else {                                \u002F\u002F nums1 0 items need to get checked\n",[125,446,447],{"class":127,"line":211},[125,448,449],{},"                                                    \u002F\u002F moves the item at nums2[j] to nums1[k]\n",[125,451,452],{"class":127,"line":217},[125,453,454],{},"                                                    \u002F\u002F decrement k and j by 1\n",[125,456,457],{"class":127,"line":223},[125,458,459],{},"                nums1[k--] = nums2[j--];\n",[125,461,462],{"class":127,"line":229},[125,463,464],{},"            }\n",[125,466,467],{"class":127,"line":235},[125,468,180],{},[125,470,471],{"class":127,"line":241},[125,472,354],{},[125,474,475],{"class":127,"line":247},[125,476,360],{},[478,479,480],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":121,"searchDepth":134,"depth":134,"links":482},[483],{"id":13,"depth":134,"text":14,"children":484},[485],{"id":30,"depth":140,"text":31},"2025-01-15","Solving LeetCode's Merge Sorted Array from the Top Interview 150 list.",false,"md",null,"en",{},"\u002Fblog\u002Fcode-log-day-9",{"title":5,"description":487},"blog\u002FCode Log - Day 9",[497,498,30],"challenge","daily-coding","FYlO44SSC6bkhL_97FBwFm4fWWk0iwCXZLEDiUnPH6o",1785357633468]