前端練習44 陣列中的資料劃分

2021-09-08 01:13:31 字數 973 閱讀 9510

陣列排序

完成乙個函式partition,它接受乙個陣列作為引數。它會搬動陣列中的元素,使得所有小於第乙個項的元素都搬動到它的左邊,所有大於第乙個項的元素都搬動到右邊。例如:

const arr = [3, 1, 6, 2, 4, 5]

partition(arr)

console.log(arr) // => [2, 1, 3, 6, 4, 5]

輸入的陣列的第乙個項是3,所以最後小於312的都到了左邊,大於3456都到了右邊。

請你在不能使用任何陣列原生方法,只能使用迴圈和賦值的情況下完成partition函式。

要注意的是不能使用陣列原生方法,所以pushsplice等等都不能使用

想到兩個方法,第乙個方法比較直觀,但是演算法複雜度是o(n²),兩次遍歷,第一次遍歷將小於第一項的放到left,大於第一項的放到right,第二次遍歷根據序列對原陣列重新賦值:

const partition = (arr) =>  else 

} for (let i = 0; i < arr.length; i++) else if (i === left.length) else

}};

第二個方法的思路只需要一次遍歷,通過遍歷指標的改變來實現,迴圈時交換陣列成員時也交換指標位置,總是保證指標在基準值序號的前面:

const partition = (arr) => 

} else

}}};

前端js中陣列的相關操作

1.陣列的建立 var arrayobj new array 建立乙個陣列 var arrayobj new array size 建立乙個陣列並指定長度,注意不是上限,是長度 var arrayobj new array element0 element1 elementn 建立乙個陣列並賦值要說...

面試題44 陣列中只出現1次的數字

題目 乙個整型陣列中,除了兩個數字之外,其他的數字都出現了兩次。求寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 邊界條件及異常 陣列為空,沒有只出現一次的數,只有乙個只出現一次的數。思路 這題好難!首先我們考慮如果陣列中只有乙個數字只出現一次,其他的都出現兩次,應該怎...

把陣列中的奇偶數劃分為兩組

早上起來看了一下微軟面試100題系列,其中一道題是將乙個陣列中的奇偶數劃分為兩組,其中奇數在前面,偶數在後面,下面是我的做法 include stdafx.h include using namespace std void swap int inputarray,int i,int j void ...