两个有序一维数组合并成一个有序一维数组
直接上代码
const A=[1,2,2,4,6,7,9,99]
const B=[1,3,4,5,10]
const merge=(arr1,arr2)=>{
const lenA=arr1.length
const lenB=arr2.length
const C=[]
let a=0; b=0; c=0; //定义下标
while(a<lenA && b<lenB){
if(arr1[a]<arr2[b]){ //两个数组依次比较
C.push(arr1[a])
a++
}else{
C.push(arr2[b])
b++
}
}
while(a<lenA){ //若arr2已经排序完成,单独排序arr1
C.push(arr1[a])
a++
}
while(b<lenB){ //若arr1已经排序完成,单独排序arr2
C.push(arr2[b])
b++
}
return C
}
console.log(merge(A,B))
这种合并逻辑简单清晰,时间复杂度取决于两个数组的长度O(lenA+lenB)。
将两个无序一维数组合并成一个有序一维数组
可以先各自排序,这里用到的是插值排序;
const A=[5,2,3,9,4,1,7,19,9]
const sort=(arr)=>{
for(let i=1;i<arr.length;i++){
for(let j=i;j>0;j--){
const currentArr=arr[j]
if(arr[j]<arr[j-1]){
arr[j]=arr[j-1]
arr[j-1]=currentArr
}
}
}
return arr
}
console.log(sort(A))
然后就是将两个有序一维数组合并成一个有序一维数组。
当然也可以先合并再排序;或者直接一边排序一边合并,这种方法逻辑复杂。
多维数组降维成一维数组
const A=[[5,2,3],[9,4,1],[7,[19,[9]]]]
const result=[]
const dArr=(arr)=>{
for(let i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
dArr(arr[i]) //递归思想
}else{
result.push(arr[i])
}
}
return result
}
console.log(dArr(A))
思想就是遍历数组,判断子项是否为数组,是则递归,否则push到result中。
将两个一维数组合并为二维数组
由于这个比较简单,这里就直接上代码
const A=["one","two","three"]
const B=[1,2,3]
const newArr=(arr1,arr2)=>{
const result=[]
for(let i=0;i<arr1.length;i++){
result.push([arr1[i],arr2[i]])
}
return result
}
//或者直接 const newArr=A.map((i,index)=>[i,B[index]])
console.log(newArr(A,B))