2164. Sort Even and Odd Indices Independently

方法一:排序 + 按序插入
遍歷 nums
數(shù)組,用 even 和 odd 數(shù)組分別存儲(chǔ)奇數(shù)和偶數(shù),按照題目要求分別 降序和升序處理;
遍歷偶數(shù)數(shù)組 even,每遇到奇數(shù)下標(biāo),則在奇數(shù)下標(biāo)中插入奇數(shù)數(shù)組 odd 中的每一個(gè)元素;若 nums
數(shù)組為偶數(shù),最后一個(gè)偶數(shù)位序未用于插值,因此在 even 數(shù)組末尾補(bǔ)上奇數(shù)數(shù)組 odd 中最后一個(gè)元素
Python版本
C++版本
復(fù)雜度分析
時(shí)間復(fù)雜度:O(N)。此處的 n 指的是數(shù)組
nums
的長度。遍歷 nums 數(shù)組需要 O(N)的復(fù)雜度,遍歷奇數(shù)數(shù)組需要 O(N / 2)的復(fù)雜度,兩者合計(jì)為總復(fù)雜度,但去掉系數(shù)。空間復(fù)雜度:O(N)。 此處的 n 指的是數(shù)組 nums 的長度,存儲(chǔ)奇偶位序的數(shù)組空間總和為 O(N);
方法二:原地修改【映射】
遍歷 nums
數(shù)組分別用數(shù)組odd 和數(shù)組 even 存儲(chǔ)奇數(shù)位序,偶數(shù)位序?qū)?yīng)的元素;遍歷奇數(shù)數(shù)組 odd
,按照題目分別降序和升序處理;
我們可以由奇數(shù)數(shù)組的每一個(gè)位序 i
, 計(jì)算出 nums
原數(shù)組中奇數(shù)位序和偶數(shù)位序分別為 2 * i + 1
和 2 * i
,按照位序修改值即可??赡艽嬖跀?shù)組長度為偶數(shù),even 數(shù)組長度比 odd 數(shù)組的長度大1 的情況,因此修改原數(shù)組末尾元素為 even 數(shù)組最后一個(gè)元素即可;
Python版本
?
C++版本
復(fù)雜度分析
時(shí)間復(fù)雜度: O(N)。 此處 n 為 數(shù)組
nums
長度,遍歷 ?nums
數(shù)組分別存儲(chǔ)奇偶數(shù), 遍歷奇數(shù)數(shù)組需要 n / 2 或者 n / 2 + 1 的復(fù)雜度,總復(fù)雜度為 n / 2 * 3。空間復(fù)雜度: O(N)。此處 n 為 數(shù)組
nums
長度,奇偶分別存儲(chǔ),耗費(fèi)大小為 n 的額外空間;