{"id":1299,"date":"2020-07-01T09:23:46","date_gmt":"2020-07-01T09:23:46","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=1299"},"modified":"2022-06-17T07:05:16","modified_gmt":"2022-06-17T07:05:16","slug":"copying-hero","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/copying-hero\/","title":{"rendered":"Copying Hero"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\" alt=\"\" \/><\/p>\n<h3>Concepts Used<\/h3>\n<blockquote>\n<p>Sorting<\/p>\n<\/blockquote>\n<h3>Difficulty Level<\/h3>\n<blockquote>\n<p>Medium<\/p>\n<\/blockquote>\n<h3>Problem Statement (Simplified):<\/h3>\n<blockquote>\n<p>We need to find the total number of steps need to make the current array of size <code>N<\/code> same as an array containing 1 to <code>N<\/code> numbers as elements. Each decrement or increment is counted as a step.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/sorting\/COPYING\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h4>Test Case:<\/h4>\n<pre><code>Input:\n1\n5\n8 4 2 1 9\n\nOutput:\n9\n\nExplanation:\nAs our target array is [1,2,3,4,5], we already have 1, 2, and 4 in our array. We have 8 and 9 in place of 3 and 5, so if convert 8 to 3, and 9 to 5, we can achieve target array. Hence minimum increments\/decrements required will be <code>(8-3)+(9-5)<\/code> ways i.e. 9 ways.<\/code><\/pre>\n<h3>Solving Approach :<\/h3>\n<p><strong>Observation:<\/strong> We can see that size of array goes from 1 to 10<sup>6<\/sup>, in worse conditions let the size of the array be 10<sup>6<\/sup> if we sort this array using any of sorting techniques i.e. <em>Bubble Sort, Insertion Sort, Selection sort<\/em>. They all take O(n<sup>2<\/sup>) in the worst cases, which results in 10<sup>12<\/sup> iterations when the size of the array is 10<sup>6<\/sup>. So we, can&#8217;t choose the above three sorting algorithms. We use <strong><em>Merge Sort<\/em><\/strong> to sort array as it sorts array in <strong><em>linearithmic time complexity<\/em><\/strong> (<code>nlog(n)<\/code>).<\/p>\n<blockquote>\n<ul>\n<li>By sorting the given array in non-decreasing order, it will make sure that the difference between element at current index and Hero array&#8217;s (Target array) element is minimum.<\/li>\n<li>Thus we can take the absolute difference between both elements, an increment or decrement, both will be taken as a step.<\/li>\n<li>Sum of all absolute differences is our final answer.<\/li>\n<\/ul>\n<\/blockquote>\n<h3>Example<\/h3>\n<blockquote>\n<p>Let the arrays be,<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1646391350794-54.copyin-hero-example-01.png\" alt=\"\" \/><\/p>\n<p>Now, we iterate on both arrays, and save absolute difference ob elements at same indexes in a variable <code>sum<\/code> initially set to <code>0<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1646391379389-54.copying-hero-01.png\" alt=\"\" \/><\/p>\n<\/blockquote>\n<h3>Solutions<\/h3>\n<p>\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_1309 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_1309 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_1309 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_1309 .wpsm_nav-tabs > li.active > a, #tab_container_1309 .wpsm_nav-tabs > li.active > a:hover, #tab_container_1309 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_1309 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_1309 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_1309 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_1309 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_1309 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_1309 .wpsm_nav-tabs > li > a:hover , #tab_container_1309 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_1309 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_1309 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_1309 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_1309 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_1309 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_1309 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_1309 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1309 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_1309 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1309 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_1309 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_1309\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_1309\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1309_1\" aria-controls=\"tabs_desc_1309_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1309_2\" aria-controls=\"tabs_desc_1309_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1309_3\" aria-controls=\"tabs_desc_1309_3\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Java<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1309_4\" aria-controls=\"tabs_desc_1309_4\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Python<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_1309\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_1309_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"c\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n\r\n#include &lt;stdio.h&gt;\r\n#include&lt;stdlib.h&gt;\r\n\r\nvoid merge(int arr[], int start, int mid, int end){\r\n    int left[mid-start+1];\r\n    int right[end-mid];\r\n    for(int i=start; i&lt;mid+1; i++){\r\n        left[i-start] =  arr[i];\r\n    }\r\n    for(int i=mid+1; i&lt;=end; i++){\r\n        right[i-(mid+1)] = arr[i];\r\n    }\r\n    int leftIndex=0, rightIndex=0, arrIndex=start;\r\n    for( ; leftIndex&lt;=mid-start &amp;&amp; rightIndex&lt;end-mid; arrIndex++){\r\n        if(left[leftIndex]&lt;right[rightIndex]){\r\n            arr[arrIndex] = left[leftIndex++];\r\n        }\r\n        else{\r\n            arr[arrIndex] = right[rightIndex++];\r\n        }\r\n    }\r\n\r\n    while(leftIndex&lt;=mid-start){\r\n        arr[arrIndex++] = left[leftIndex++];\r\n    }\r\n\r\n    while(rightIndex&lt;end-mid){\r\n        arr[arrIndex++] = right[rightIndex++];\r\n    }\r\n\r\n}\r\n\r\nvoid mergeSort(int arr[], int start, int end){\r\n    if(end==start)\r\n        return;\r\n    mergeSort(arr,start,(start+end)\/2);\r\n    mergeSort(arr,((start+end)\/2)+1,end);\r\n    merge(arr,start,(start+end)\/2,end);\r\n}\r\n\r\nint main()\r\n{\r\n\r\n  int test;\r\n  scanf(&quot;%d&quot;,&amp;test);\r\n\r\n  while(test--){\r\n\r\n      int n;\r\n    scanf(&quot;%d&quot;,&amp;n);\r\n\r\n    int a[n];\r\n\r\n    for(int i=0;i&lt;n;i++)\r\n      scanf(&quot;%d&quot;,&amp;a[i]);\r\n\r\n    mergeSort(a,0,n-1);\r\n\r\n    long long int cost=0;\r\n\r\n    for(int i=0;i&lt;n;i++)\r\n      cost+= abs(a[i]-(i+1));\r\n\r\n    printf(&quot;%lld&#92;n&quot;, cost);\r\n  }\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\r\n\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1309_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n\r\n#include &lt;bits\/stdc++.h&gt;\r\nusing namespace std;\r\n\r\nvoid merge(int arr[], int start, int mid, int end){\r\n    int left[mid-start+1];\r\n    int right[end-mid];\r\n    for(int i=start; i&lt;mid+1; i++){\r\n        left[i-start] =  arr[i];\r\n    }\r\n    for(int i=mid+1; i&lt;=end; i++){\r\n        right[i-(mid+1)] = arr[i];\r\n    }\r\n    int leftIndex=0, rightIndex=0, arrIndex=start;\r\n    for( ; leftIndex&lt;=mid-start &amp;&amp; rightIndex&lt;end-mid; arrIndex++){\r\n        if(left[leftIndex]&lt;right[rightIndex]){\r\n            arr[arrIndex] = left[leftIndex++];\r\n        }\r\n        else{\r\n            arr[arrIndex] = right[rightIndex++];\r\n        }\r\n    }\r\n\r\n    while(leftIndex&lt;=mid-start){\r\n        arr[arrIndex++] = left[leftIndex++];\r\n    }\r\n\r\n    while(rightIndex&lt;end-mid){\r\n        arr[arrIndex++] = right[rightIndex++];\r\n    }\r\n\r\n}\r\n\r\nvoid mergeSort(int arr[], int start, int end){\r\n    if(end==start)\r\n        return;\r\n    mergeSort(arr,start,(start+end)\/2);\r\n    mergeSort(arr,((start+end)\/2)+1,end);\r\n    merge(arr,start,(start+end)\/2,end);\r\n}\r\n\r\nint main()\r\n{  \r\n\r\n  int test;\r\n  cin&gt;&gt;test;\r\n  while(test--){\r\n\r\n      int n;\r\n      cin&gt;&gt;n;\r\n\r\n    int a[n];\r\n    for(int i=0;i&lt;n;i++)\r\n      cin&gt;&gt;a[i];\r\n    mergeSort(a,0,n-1);\r\n\r\n    long long int cost=0;\r\n    for(int i=0;i&lt;n;i++)\r\n      cost+=abs(a[i]-(i+1));\r\n\r\n    cout&lt;&lt;cost&lt;&lt;endl;\r\n  }\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1309_3\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"java\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n\r\nimport java.util.*;\r\nimport java.io.*;\r\n\r\npublic class Main {\r\n  static void merge(int arr[], int start, int mid, int end){\r\n    int left[] = new int[mid-start+1];\r\n    int right[] = new int[end-mid];\r\n    for(int i=start; i&lt;mid+1; i++){\r\n        left[i-start] =  arr[i];\r\n    }\r\n    for(int i=mid+1; i&lt;=end; i++){\r\n        right[i-(mid+1)] = arr[i];\r\n    }\r\n    int leftIndex=0, rightIndex=0, arrIndex=start;\r\n    for( ; leftIndex&lt;=mid-start &amp;&amp; rightIndex&lt;end-mid; arrIndex++){\r\n        if(left[leftIndex]&lt;right[rightIndex]){\r\n            arr[arrIndex] = left[leftIndex++];\r\n        }\r\n        else{\r\n            arr[arrIndex] = right[rightIndex++];\r\n        }\r\n    }\r\n\r\n    while(leftIndex&lt;=mid-start){\r\n        arr[arrIndex++] = left[leftIndex++];\r\n    }\r\n\r\n    while(rightIndex&lt;end-mid){\r\n        arr[arrIndex++] = right[rightIndex++];\r\n    }\r\n\r\n}\r\n\r\n  static void mergeSort(int arr[], int start, int end){\r\n      if(end==start)\r\n          return;\r\n      mergeSort(arr,start,(start+end)\/2);\r\n      mergeSort(arr,((start+end)\/2)+1,end);\r\n      merge(arr,start,(start+end)\/2,end);\r\n  }\r\n\r\n  public static void main(String args[]) throws IOException {\r\n\r\n    Scanner sc = new Scanner(System.in);\r\n    int test = sc.nextInt();\r\n\r\n    while(test--!=0){\r\n\r\n        int n = sc.nextInt();\r\n\r\n      int a[] = new int[n];\r\n\r\n      for(int i=0;i&lt;n;i++)\r\n        a[i] = sc.nextInt();\r\n\r\n      mergeSort(a,0,n-1);\r\n\r\n      long cost=0;\r\n\r\n      for(int i=0;i&lt;n;i++)\r\n        cost+= Math.abs(a[i]-(i+1));\r\n\r\n      System.out.println(cost);\r\n    }\r\n\r\n  }\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1309_4\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"python\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\ndef merge(arr, start, mid, end):\r\n\tleft = [0 for i in range(mid - start + 1)]\r\n\tright = [0 for i in range(end - mid)]\r\n\t\r\n\tfor i in range(start, mid + 1):\r\n\t\tleft[i - start] =  arr[i]\r\n\t\r\n\tfor i in range(mid + 1, end + 1):\r\n\t\tright[i - (mid + 1)] = arr[i]\r\n\t\r\n\tleftIndex = 0\r\n\trightIndex = 0\r\n\tarrIndex = start\r\n\t\r\n\twhile leftIndex &lt;= mid - start and rightIndex &lt; end - mid:\r\n\t\r\n\t\tif(left[leftIndex] &lt; right[rightIndex]):\r\n\t\t\tarr[arrIndex] = left[leftIndex]\r\n\t\t\tleftIndex += 1\r\n\t\t\r\n\t\telse:\r\n\t\t\tarr[arrIndex] = right[rightIndex]\r\n\t\t\trightIndex += 1\r\n\t\t\r\n\t\tarrIndex += 1\r\n\t\r\n\twhile(leftIndex &lt;= mid - start):\r\n\t\tarr[arrIndex] = left[leftIndex]\r\n\t\tleftIndex += 1\r\n\t\tarrIndex += 1\r\n\t\r\n\twhile(rightIndex &lt; end - mid):\r\n\t\tarr[arrIndex] = right[rightIndex]\r\n\t\trightIndex += 1\r\n\t\tarrIndex += 1\r\n\t\r\ndef mergeSort(arr, start, end):\r\n\tif(end == start):\r\n\t\treturn\r\n\tmergeSort(arr, start, (start + end) \/\/ 2)\r\n\tmergeSort(arr, ((start + end) \/\/ 2) + 1, end)\r\n\tmerge(arr, start, (start + end) \/\/ 2, end)\r\n\r\n\r\nfor _ in range(int(input())):\r\n\r\n\tn = int(input())\r\n\ta = list(map(int, input().split()))\r\n\tmergeSort(a, 0, n - 1)\r\n\r\n\tcost = 0\r\n\tfor i in range(n):\r\n\t\tcost += abs(a[i] - (i + 1))\r\n\r\n\tprint(cost)\r\n\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_1309 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_1309 a\"),jQuery(\"#tab-content_1309\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t<br \/>\n<strong>Space Complexity : O(1)<\/strong><\/p>\n<blockquote>\n<p>where <code>N<\/code> is length of array<\/p>\n<\/blockquote>\n<p>[forminator_quiz id=&quot;1342&quot;]<\/p>\n<p>So, in this blog, we have tried to explain sorting in the most optimal way. If you want to solve more questions on sorting, which are curated by our expert mentors at PrepBytes, you can follow this <a href=\"https:\/\/mycode.prepbytes.com\/interview-coding\/practice\/sorting\">sorting<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used Sorting Difficulty Level Medium Problem Statement (Simplified): We need to find the total number of steps need to make the current array of size N same as an array containing 1 to N numbers as elements. Each decrement or increment is counted as a step. Test Case: Input: 1 5 8 4 2 [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[92],"tags":[],"class_list":["post-1299","post","type-post","status-publish","format-standard","hentry","category-sorting-interview-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Copying Hero | Sorting Interview Programming | Prepbytes<\/title>\n<meta name=\"description\" content=\"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/copying-hero\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Copying Hero | Sorting Interview Programming | Prepbytes\" \/>\n<meta property=\"og:description\" content=\"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/copying-hero\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-01T09:23:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-17T07:05:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Copying Hero\",\"datePublished\":\"2020-07-01T09:23:46+00:00\",\"dateModified\":\"2022-06-17T07:05:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/\"},\"wordCount\":274,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\",\"articleSection\":[\"Sorting interview programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/copying-hero\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/\",\"name\":\"Copying Hero | Sorting Interview Programming | Prepbytes\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\",\"datePublished\":\"2020-07-01T09:23:46+00:00\",\"dateModified\":\"2022-06-17T07:05:16+00:00\",\"description\":\"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/copying-hero\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/copying-hero\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sorting interview programming\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/sorting-interview-programming\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Copying Hero\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Copying Hero | Sorting Interview Programming | Prepbytes","description":"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prepbytes.com\/blog\/copying-hero\/","og_locale":"en_US","og_type":"article","og_title":"Copying Hero | Sorting Interview Programming | Prepbytes","og_description":"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.","og_url":"https:\/\/prepbytes.com\/blog\/copying-hero\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-07-01T09:23:46+00:00","article_modified_time":"2022-06-17T07:05:16+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Copying Hero","datePublished":"2020-07-01T09:23:46+00:00","dateModified":"2022-06-17T07:05:16+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/"},"wordCount":274,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png","articleSection":["Sorting interview programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/copying-hero\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/","url":"https:\/\/prepbytes.com\/blog\/copying-hero\/","name":"Copying Hero | Sorting Interview Programming | Prepbytes","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png","datePublished":"2020-07-01T09:23:46+00:00","dateModified":"2022-06-17T07:05:16+00:00","description":"Find the Total Number of Steps Need to Make the Current Array of Size N Same as an Array Containing 1 to N Numbers as Elements. Each Decrement or Increment Is Counted as a Step.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/copying-hero\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097642539-Article_293.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/copying-hero\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Sorting interview programming","item":"https:\/\/prepbytes.com\/blog\/category\/sorting-interview-programming\/"},{"@type":"ListItem","position":3,"name":"Copying Hero"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=1299"}],"version-history":[{"count":11,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1299\/revisions"}],"predecessor-version":[{"id":8107,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1299\/revisions\/8107"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=1299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=1299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=1299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}