javascript算法之數(shù)組反轉
1.數(shù)組反轉
1.1 leecode題目-旋轉數(shù)組
給你一個數(shù)組,將數(shù)組中的元素向右輪轉 k 個位置,其中 k 是非負數(shù)。
示例:
輸入: nums = [1,2,3,4,5,6,7], k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右輪轉 1 步: [7,1,2,3,4,5,6]
向右輪轉 2 步: [6,7,1,2,3,4,5]
向右輪轉 3 步: [5,6,7,1,2,3,4]
1.2 分析題目
- 數(shù)組元素有序輪轉,即輪轉位置k,意味著,每個元素向后移k位,且長度n-k~n-1位置的元素會被挪移至最前方;
- k為非負整數(shù),所以,不存在向左輪轉;
1.3解題思路
在不使用額外數(shù)組的前提下,我們可以有如下思考, 設數(shù)組長度為length,則
- 需要輪轉k位,即數(shù)組的最后k位會進行挪移至數(shù)組前方,即,當我們反轉數(shù)組后,可以得知[0,k-1],[k,lenth-1]這兩個數(shù)組,即為輪轉之后的對應數(shù)組,但是,兩個數(shù)組中的元素排序是反的;
- 接下來,依次反轉[0,k-1],[k,lenth-1],這兩個數(shù)組,得到的數(shù)組就是答案了
1.4 代碼
const reverseArray = (nums, start, end) => {
while (start < end) {
const temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start += 1;
end -= 1;
}
return nums;
};
var reverseFunction = function(nums, k) {
let length = nums.length;
nums = reverseArray(nums, 0, length - 1);
nums = reverseArray(nums, 0, k - 1);
nums = reverseArray(nums, k, length - 1);
};
reverseFunction([1,2,3,4,5,6,7],3);輸出:[5,6,7,1,2,3,4]
1.5 復雜度分析
- 時間復雜度:時間復雜度:O(n),其中 nn 為數(shù)組的長度。每個元素被翻轉兩次,一共 n 個元素,因此總時間復雜度為 O(2n)=O(n)。
- 空間復雜度:O(1)。只需要常數(shù)空間存放若干變量。
1.6 其他解法
思路:
- 既然輪轉k位,即[length-1-k,length-1]位置的元素變?yōu)閇0,k-1]
- [0,length-1-k]位置的元素變?yōu)閇length-1-k,length-1]
- 所以我們只需要將原數(shù)組拆分為[0,k-1],[length-1-k,length-1],然后將其按照[length-1-k,length-1]+[0,k-1]組裝成一個數(shù)組即可
代碼:
var reverseFunction2 = function(nums, k) {
let length = nums.length;
let arrayLeft = nums.slice(0,length-k);
let arrayRight = nums.slice(length-k);
// return [...new Set([...arrayRight,...arrayLeft])];
return arrayRight.concat(arrayLeft);
};
reverseFunction2([1,2,3,4,5,6,7],3);大家會發(fā)現(xiàn)上述代碼中,我注釋了一行,因為,絕對誘人會想使用new Set方法去合并兩個數(shù)組,那么,請注意,千萬不能使用,因為,new Set方法,會講兩個數(shù)組進行合并后去重,如果原數(shù)組中出現(xiàn)相同元素,則,new Set將會給使用者狠狠上一課!
總結
算法的邏輯不同的人有不同的想法,但是殊途同歸,答案是一致的,前提是,一定要靠清楚問題,仔細分析,驗證的時候也要考慮各種情況。
到此這篇關于javascript算法之數(shù)組反轉的文章就介紹到這了,更多相關javascript數(shù)組反轉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript實現(xiàn)隨機數(shù)生成器(去重)
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)隨機數(shù)生成器,生成不重復的隨機數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
js實現(xiàn)同一頁面可多次調(diào)用的圖片幻燈切換效果
這篇文章主要介紹了js實現(xiàn)同一頁面可多次調(diào)用的圖片幻燈切換效果,可實現(xiàn)在同一頁面中多次調(diào)用幻燈切換效果,非常具有實用價值,需要的朋友可以參考下2015-02-02

