陣列排序
完成乙個函式partition
,它接受乙個陣列作為引數。它會搬動陣列中的元素,使得所有小於第乙個項的元素都搬動到它的左邊,所有大於第乙個項的元素都搬動到右邊。例如:
const arr = [3, 1, 6, 2, 4, 5]
partition(arr)
console.log(arr) // => [2, 1, 3, 6, 4, 5]
輸入的陣列的第乙個項是3
,所以最後小於3
的1
、2
的都到了左邊,大於3
的4
,5
,6
都到了右邊。
請你在不能使用任何陣列原生方法,只能使用迴圈和賦值的情況下完成partition
函式。
要注意的是不能使用陣列原生方法,所以push
、splice
等等都不能使用
想到兩個方法,第乙個方法比較直觀,但是演算法複雜度是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 ...