精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇帶給你Web前端算法面試題

開發 前端
當問題規模數據大量增加時,重復執行的次數也必定會增加,那么我們就有必要關心執行次數是以什么樣的數量級增加,這也是分析時間復雜度的意義,是一個非常重要衡量算法好快的事前估算的方法。

時間復雜度分析

當問題規模數據大量增加時,重復執行的次數也必定會增加,那么我們就有必要關心執行次數是以什么樣的數量級增加,這也是分析時間復雜度的意義,是一個非常重要衡量算法好快的事前估算的方法

常見的時間復雜度:

  • O(1):常數階的復雜度,這種復雜度無論數據規模如何增長,計算時間是不變的。
const increment = n => n++
  • O(n):線性復雜度,線性增長。
// 最典型的例子就是線性查找
const linearSearch = (arr,target) = {
for (let i = 0;i<arr.length;i++){
if(arr[i] === target) return 1;
}
return -1;
}
  • O(logn):對數復雜度,隨著問題規模的增長,計算時間會對數級增長,典型的例子是歸并查找。
  • O(nlogn):線性對數復雜度,計算時間隨數據規模呈線性對數級增長,典型的例子是歸并排序。
  • O(n^2):平方級復雜度,典型就是雙層循環的時候,代表應用是冒泡排序算法。

常見的排序算法

常見的排序算法這里總結四種最具代表性的:

冒泡排序

冒泡排序是一種簡單的排序算法,它需要重復的走訪序列,一次只比較兩個數據,如果順序錯誤則交換這兩個數據,直到沒有在需要交換的數據,走訪結束,具體算法描述如下:

比較相鄰元素,如果第一個比第二個大,就交換他們兩個依次走訪執行第一步,那么第一趟后,最后的元素應該是最大的數重復走訪,直到排序完成。

const bubbleSort = arr => {
console.time('bubbleSort耗時');
let len = arr.length;
for(let i = 0;i<len;i++){
for(let j = 0;j<len-i-1;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
}
console.timeEnd('bubbleSort耗時');
return arr
}

冒泡排序改進方案:

方案一:設置一個標記變量pos,用來記錄每次走訪的最后一次進行交換的位置,那么下次走訪之后的序列便可以不再訪問。

const bubbleSort_pos = arr => {
console.time('bubbleSort_pos耗時')
let i = arr.length - 1;
while(i > 0){
let pos = 0;
for(var j=0;j<i;j++){
if(arr[j]>arr[j+1]){
pos = j;
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
}
}
i = pos;
}
console.timeEnd('bubbleSort_pos耗時')
return arr;
}

方案二:傳統冒泡一趟只能找到一個最大或者最小值,我們可以考慮在利用每趟排序過程中進行正向和反向冒泡,一次可以得到一個最大值和最小值,從而使排序趟數幾乎減少一半。

const bubbleSort_ovonic = arr => {
console.time('bubbleSort_ovonic耗時')
let low = 0;
let height = arr.length -1;
let tmp,j;
while(low < height){
for(j=low;j<height;++j){ // 正向冒泡,找到最大值
if(arr[j] > arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
}
}
--height;
for(j=height;j>low;--j){ // 反向冒泡,找到最小值
if(arr[j] < arr[j-1]){
[arr[j-1],arr[j]] = [arr[j],arr[j-1]]
}
}
++low;
}
console.timeEnd('bubbleSort_ovonic耗時')
return arr;
}

以上提供兩種改進冒泡的思路,耗時在這只是進行粗略對比,并不完全確定好壞,相比之下改進后的冒泡時間復雜度更低,下圖實例展示結果耗時更短。

快速排序

快速排序是分治策略的經典實現,也是對冒泡排序的改進,出現頻率較高,基本思路是經過一趟排序,把數據分割成獨立的兩部分,其中一部分數據要比另一部分都小,然后按此方法繼續排序,以達到整個序列有序,具體算法描述如下:

從數組中挑出一個元素作為"基準"分區:所有比基準小的值放前面,而比基準大的值放后面,基準處于數列中間位置按照此方法依次排序(遞歸),以達到序列有序。

// 遞歸方法的其中一種形式
const quickSort = (arr) => {
if(arr.length <= 1){ return arr };
let pivotIndex = Math.floor(arr.length/2);
let pivot = arr.splice(pivotIndex,1)[0]; // 確定基準
let left = [] , right = [];
for(let i = 0;i<arr.length;i++){
if(arr[i]<pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot],quickSort(right));
}

希爾排序

第一個突破O(n^2)的排序算法;是簡單插入排序的改進版;與插入排序的不同點在于,它會優先比較距離較遠的元素。希爾排序又叫做增量縮小排序,核心在于間隔序列的設定,既可以提前設定好間隔序列,也可以動態的定義間隔序列,后者是《算法(第四版)》中提出的,實現如下:

選擇一個增量序列t1,t2...tk,其中ti>tj,tk=1按增量序列個數k,對序列進行k趟排序每趟排序根據對應的增量ti,將待排序列分割成長度為m的若干子序列,然后分別對各子表進行直接插入排序。僅當增量因子為1時,整個序列作為一個表來處理,表長度即為整個序列的長度。

const shellSort = arr => {
console.time('shellSort耗時')
let len = arr.length,
gap = 1,
temp;
while(gap < len/5){ gap = gap*5+1 } // 動態定義間隔序列
for(gap; gap > 0; gap = Math.floor(gap/5)){
for(let i = gap;i<len;i++){
temp = arr[i];
for(var j=i-gap; j>=0&&arr[j]>temp; j-=gap){
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
console.timeEnd('shellSort耗時');
return arr;
}

歸并排序

歸并排序不受輸入數據的影響,時間復雜度始終都是O(nlogn),但代價是需要額外的內存空間。歸并排序也是分治法的經典體現,先使子序列有序,再使子序列段間有序,若將兩個有序表合并成一個有序表,稱為2-路歸并。實現如下:

將長度為n的序列,分成兩個長度為n/2的子序列對這兩個子序列分別采用歸并排序將兩個排序好的子序列合并成最終排序序列。

const merge = (left,right) => {
let result = [];
while(left.length && right.length){
if(left[0] <= right[0]){
result.push(left.shift());
}else{
result.push(right.shift());
}
}
while(left.length)
result.push(left.shift());

while(right.length)
result.push(right.shift());

return result;
}

const mergeSort = arr => {
let len = arr.length;
if(len < 2) return arr;
let middle = Math.floor(len / 2),
left = arr.slice(0,middle),
right = arr.slice(middle);

return merge(mergeSort(left),mergeSort(right));
}

常見的查找算法

線性查找

線性查找較簡單,只需要簡單遍歷即可。

const linearSearch = (arr,target) => {
for(let i =0;i<arr.length;i++){
if(arr[i] === target) return i
}
return -1
}

時間復雜度:最佳情況O(n),最差情況O(n),平均情況O(n)

二分查找法

也叫作折半查找,要求查找表的數據實現線性結構存儲,還要求查找表中的順序是有序的

實現思路如下:

首先設兩個指針,low表示最低索引,height表示最高索引然后取中間位置索引,判斷middle處的值是否是要查找的數字,是則查找結束;比所求值較小就把low設為middle+1,較大則把height設為middle-1然后到新分區繼續查找,直到找到或者low>height找不到要查找的值結束。

const  binarySearch = (arr,target) => {
let height = arr.length - 1;
let low = 0;
while(low <= height){
let middle = Math.floor((low+height)/2)
if(target < arr[middle]){
height = middle - 1
}else if(target > arr[middle]){
low = middle + 1
}else{
return middle
}
}
return -1
}

時間復雜度分析:最佳情況O(logn),最差情況O(logn),平均情況O(logn)。

參考:damonare。

二叉樹的遍歷方式

二叉樹遍歷有四種方式:先序遍歷,中序遍歷,后序遍歷,層序遍歷。

前序遍歷:先訪問根節點,然后前序遍歷左子樹,再前序遍歷右子樹。

中序遍歷:先中序遍歷左子樹,然后訪問根節點,最后遍歷右子樹。

后序遍歷:從左到右,先葉子后結點的方式遍歷訪問左子樹,最后訪問根節點。

層序遍歷:從根結點從上往下逐層遍歷,在同一層,按從左到右的順序對結點逐個訪問。

實現二叉樹的層序遍歷

有兩種通用的遍歷樹的策略:

深度優先遍歷(DFC)

正如名字一樣,深度優先遍歷采用深度作為優先級,從某個確定的葉子,然后再返回根到另個分支,有細分為先序遍歷,中序遍歷和后序遍歷

廣度優先遍歷(BFC)

廣度優先按照高度順序一層一層訪問整棵樹,高層次的結點會比低層的結點先訪問到

// 通過迭代方式實現
const levelOrder = function(root) {
const res = [];
const stack = [{ index: 0, node: root }];

while (stack.length > 0) {
const { index, node } = stack.pop();
if (!node) continue;
res[index] = res[index] ? [...res[index], node.val] : [node.val];
stack.push({ index: index + 1, node: node.right });
stack.push({ index: index + 1, node: node.left });
}
return res;
};
責任編輯:姜華 來源: 今日頭條
相關推薦

2021-07-12 06:11:14

SkyWalking 儀表板UI篇

2021-02-24 08:32:45

Web Compone前端Web 應用

2022-04-29 14:38:49

class文件結構分析

2021-04-14 14:16:58

HttpHttp協議網絡協議

2021-04-08 11:00:56

CountDownLaJava進階開發

2021-04-01 10:51:55

MySQL鎖機制數據庫

2021-07-21 09:48:20

etcd-wal模塊解析數據庫

2024-06-13 08:34:48

2022-02-17 08:53:38

ElasticSea集群部署

2021-03-12 09:21:31

MySQL數據庫邏輯架構

2023-03-29 07:45:58

VS編輯區編程工具

2021-06-21 14:36:46

Vite 前端工程化工具

2022-03-22 09:09:17

HookReact前端

2021-01-28 08:55:48

Elasticsear數據庫數據存儲

2021-07-08 07:30:13

Webpack 前端Tree shakin

2023-03-13 09:31:04

2022-02-25 15:50:05

OpenHarmonToggle組件鴻蒙

2021-10-28 08:51:53

GPIO軟件框架 Linux

2021-04-23 08:59:35

ClickHouse集群搭建數據庫

2021-04-14 07:55:45

Swift 協議Protocol
點贊
收藏

51CTO技術棧公眾號

99久久亚洲精品| 欧美性猛交xxx高清大费中文| 精品一区二区三区在线观看国产| xxav国产精品美女主播| 韩国三级丰满少妇高潮| 国产激情在线播放| 国产精品午夜电影| 成人av资源网| 老熟妇一区二区三区啪啪| 日韩88av| 精品国产免费视频| 久久久久久久久久久久91| av片在线观看网站| 久久―日本道色综合久久| 国产这里只有精品| 亚洲 欧美 视频| 久久视频精品| 精品视频—区二区三区免费| 红桃视频 国产| 最新欧美色图| 亚洲精品免费电影| 无吗不卡中文字幕| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 亚洲最新色图| 亚洲欧美另类人妖| 亚洲香蕉中文网| 精品亚洲a∨一区二区三区18| 一本一道波多野结衣一区二区| 国产免费xxx| 黄色av免费在线看| av电影天堂一区二区在线观看| 成人黄色激情网| 中文文字幕一区二区三三| 亚洲麻豆视频| 久久97精品久久久久久久不卡| 最新中文字幕av| 久久影院资源站| 日韩视频免费直播| 国产无遮挡猛进猛出免费软件| 亚洲天堂导航| 婷婷亚洲久悠悠色悠在线播放| 日韩国产精品毛片| 欧美成人xxx| 欧美国产精品久久| 欧美午夜精品久久久久久蜜| 丰满人妻av一区二区三区| 青青青草视频在线| 日韩成人三级| 亚洲人在线视频| 800av在线播放| 91精品国产自产在线丝袜啪| 91精品国产入口| 日韩精品视频一二三| 台湾佬中文娱乐久久久| 欧美香蕉大胸在线视频观看| 欧美亚洲日本一区二区三区| 欧洲黄色一区| 亚洲午夜三级在线| 欧美在线观看视频免费| caopon在线免费视频| 亚洲欧洲日产国码二区| 在线成人性视频| av播放在线| 综合激情成人伊人| 影音先锋男人的网站| 黄色av电影在线观看| 中文字幕一区二| 中文字幕一区二区三区5566| 米奇777四色精品人人爽| 国产精品久久精品日日| 国产大尺度在线观看| 91高清在线观看视频| 亚洲精品成人悠悠色影视| 91精品国产毛片武则天| 欧美aaaxxxx做受视频| 亚洲成人自拍网| 日本一区二区黄色| 日本欧美日韩| 91精品国产免费| 男人女人拔萝卜视频| 精品福利网址导航| 亚洲日韩中文字幕| 欧美一区二区三区观看| 阿v视频在线| 极品少妇一区二区三区精品视频 | 成人日韩精品| 欧美日精品一区视频| 亚洲精品在线网址| 久久久久影视| 综合av色偷偷网| 欧美精品一区二区蜜桃| 欧美专区在线| 成人性生交大片免费看视频直播 | 国产91露脸合集magnet| 精品1区2区| 伊人免费在线| 亚洲福中文字幕伊人影院| 农村妇女精品一二区| 国外成人福利视频| 精品国产1区二区| 中文字幕在线观看免费高清| 欧美激情视频一区二区三区免费| 91高清在线免费观看| 91porny九色| 国产a区久久久| 欧美日韩在线观看一区| av香蕉成人| 在线免费观看不卡av| 无码人妻一区二区三区精品视频| 国产欧美日韩| 久久久最新网址| 在线免费观看视频网站| 99热在这里有精品免费| 四虎免费在线观看视频| 日日夜夜天天综合| 日韩一区国产二区欧美三区| 91激情视频在线观看| 亚洲日本视频| 亚洲aⅴ男人的天堂在线观看| 免费人成在线观看网站| 亚洲成精国产精品女| 91视频这里只有精品| 蜜桃一区二区三区| 高清视频欧美一级| 一本一道人人妻人人妻αv| 91在线porny国产在线看| 玖玖精品在线视频| 国产精品99| 精品亚洲一区二区三区四区五区| 劲爆欧美第一页| 精品在线播放免费| 亚洲人久久久| av在线日韩| 亚洲精品自拍第一页| 久久久一区二区三区四区| 老司机午夜精品| 日日夜夜精品网站| 久久人体大尺度| 亚洲激情在线观看| 日本天堂在线视频| 成人精品一区二区三区中文字幕| 老司机午夜网站| 99视频这里有精品| 久久精品国产99国产精品澳门 | 欧美精品粉嫩高潮一区二区| 免费在线观看a视频| 丝袜美腿亚洲综合| 日本一区二区三区免费观看| 成人性生交大片免费观看网站| 亚洲精品电影网| www.日本精品| 91麻豆6部合集magnet| av动漫在线看| 美日韩黄色大片| 91精品国产91久久久久久久久 | 成人四虎影院| 中文字幕自拍vr一区二区三区| 波多野结衣二区三区| 国产亚洲成年网址在线观看| chinese少妇国语对白| 中文字幕精品影院| 国产精品电影网| av片在线免费观看| 欧美精品久久一区二区三区| 91香蕉一区二区三区在线观看| 加勒比av一区二区| 国产成人艳妇aa视频在线| 国产精品传媒| 91tv亚洲精品香蕉国产一区7ujn| 五月婷婷六月丁香综合| 色综合久久综合网欧美综合网| 国产精品国产三级国产专业不| 毛片一区二区三区| 300部国产真实乱| 免费观看成人www动漫视频| 日本人成精品视频在线| 9色在线观看| 欧美一二三在线| 奇米影视第四色777| 久久精品无码一区二区三区| 一女二男3p波多野结衣| 欧美三级第一页| 精品综合在线| www.国产精品| 欧美激情一区二区三区高清视频| 三级在线电影| 欧美狂野另类xxxxoooo| 欧美精品99久久久| 2021中文字幕一区亚洲| www.五月天色| 宅男噜噜噜66一区二区| 一本久道久久综合| 国产精品nxnn| 国产日韩在线视频| 大菠萝精品导航| 色噜噜狠狠色综合网图区| 国产综合在线播放| 在线观看日产精品| 久久久综合久久| 国产精品久久久一本精品| 国产精品麻豆入口| 经典一区二区三区| 成人羞羞国产免费网站| 欧美va天堂在线| 日本一区二区三区视频免费看 | 免费一区二区三区在在线视频| 狂野欧美性猛交xxxx| 97精品免费视频| 国产剧情在线| 一本一本久久a久久精品综合小说| 精品国自产拍在线观看| 91久久精品一区二区三区| 午夜写真片福利电影网| 中文字幕免费在线观看视频一区| 在线看黄色的网站| 国精品**一区二区三区在线蜜桃| 日韩激情免费视频| 欧美人成在线| 一区二区三区四区不卡| 亚洲盗摄视频| 国产一区二区三区四区hd| 国产高清精品二区| 国产精品香蕉国产| 欧美成人黑人| 91av视频在线| 男插女视频久久久| 插插插亚洲综合网| 色影视在线观看| 亚洲人成电影在线| 三级无遮挡在线观看| 亚洲激情 国产| 日韩中文字幕免费在线观看| 欧美一级二级在线观看| 中文字幕人妻色偷偷久久| 91久久国产综合久久| 少妇一级淫片免费放中国| 亚洲午夜电影在线| 免费在线观看黄色av| 亚洲柠檬福利资源导航| 欧美肥妇bbwbbw| 国产精品色眯眯| 日本一二三不卡视频| 久久精品视频在线免费观看| 亚洲最大成人网站| 91网站在线观看视频| 日韩av无码一区二区三区不卡| 国产成人亚洲综合色影视| 99九九99九九九99九他书对| 精品一区二区国语对白| 特级丰满少妇一级| 免费人成网站在线观看欧美高清| 国产成人亚洲精品无码h在线| 亚洲一区二区三区免费在线观看 | 亚洲欧美综合7777色婷婷| 国产欧美一区二区三区沐欲| 欧美大波大乳巨大乳| 国产女人18水真多18精品一级做| 人妻视频一区二区| 中文字幕色av一区二区三区| 一本一本久久a久久| 成人免费在线视频| 欧美日韩在线国产| 亚洲高清在线精品| 亚洲天堂一区在线| 色综合久久88色综合天天6 | 欧美日韩亚洲另类| 国产精品女同一区二区| 宅男噜噜噜66一区二区66| 国产夫妻自拍av| 亚洲电影免费观看高清完整版在线| 欧美 日韩 国产 精品| 亚洲国产精品人人爽夜夜爽| 天堂av在线播放| 国产一区二区黄| 韩国av网站在线| 久久久久久久97| 欧美大片1688| 91免费综合在线| 国产精品视频3p| 日韩一区二区电影在线观看| 欧美gayvideo| 男女激情免费视频| 久热精品在线| 日韩av自拍偷拍| 成人丝袜视频网| 国产jjizz一区二区三区视频| 亚洲丝袜制服诱惑| 欧美成人aaaaⅴ片在线看| 91久久国产最好的精华液| 99精品在线看| 日韩精品免费在线观看| 午夜视频在线看| 欧美高清视频在线| 成人教育av| 91香蕉国产在线观看| 综合亚洲色图| 麻豆一区二区三区在线观看| 亚洲影院免费| 污污视频网站在线| 久久久久久电影| 久久久久国产精品夜夜夜夜夜| 一本一道久久a久久精品| 精品免费久久久| 在线免费观看羞羞视频一区二区| 怡红院在线观看| 国产精品久久久久久久天堂| 国产成人澳门| 爱爱爱视频网站| 美日韩精品视频| 丰满人妻一区二区三区大胸| 国产视频911| 日本熟妇毛茸茸丰满| 欧美一区二区三区电影| 成人好色电影| 97人人做人人爱| 视频欧美一区| 亚洲亚洲精品三区日韩精品在线视频| 日韩午夜av在线| 韩国三级丰满少妇高潮| 国产精品美女一区二区在线观看| 久久国产黄色片| 欧美精品一区二区三区四区| 国内精品久久久久久野外| 国产精品激情av电影在线观看| 国产一区二区三区不卡av| 大桥未久一区二区三区| 免费在线一区观看| 欧美狂猛xxxxx乱大交3| 欧美日韩一区二区三区在线免费观看| www.com在线观看| 久久精品国产精品亚洲| 天堂久久午夜av| 欧美成人综合一区| 国产精品久久久久久久免费软件| 秘密基地免费观看完整版中文 | 影音先锋在线亚洲| 美国一区二区三区在线播放| 久久精品国产亚洲AV熟女| 婷婷一区二区三区| 亚洲免费黄色片| 欧美高清性猛交| 91午夜精品| 欧美视频在线第一页| 国产大陆a不卡| 久草资源在线视频| 日韩视频免费观看高清在线视频| 成人福利片网站| 亚洲综合视频1区| 欧美精品国产一区二区| 丰满少妇中文字幕| 樱花草国产18久久久久| 亚洲av无码国产精品久久不卡 | 国产黄色的视频| 91精品福利在线一区二区三区| 黄色网址视频在线观看| 91九色精品视频| 你懂的亚洲视频| 美女黄色一级视频| 精品久久香蕉国产线看观看亚洲 | 精品国产一区二区三区2021| 福利网在线观看| 国产精品一区不卡| 国产无码精品视频| 亚洲精品天天看| 在线一区视频观看| 中国成人在线视频| 国产风韵犹存在线视精品| 伊人365影院| 亚洲欧美视频在线| 精品国产美女a久久9999| 9l视频自拍9l视频自拍| 成年人午夜久久久| 亚洲中文字幕无码爆乳av| 亚洲一区二区久久久| 精品福利在线| www.日本三级| 91麻豆国产香蕉久久精品| 欧美一级淫片免费视频黄| 中文综合在线观看| 中文在线综合| 精品一区二区中文字幕| 国产精品狼人久久影院观看方式| 国产成人精品亚洲精品色欲| 97在线观看视频| 日韩激情在线| 亚洲图片欧美另类| 欧洲在线/亚洲| 中文字幕在线观看播放| 久久久久欧美| 国产在线观看一区二区| 韩国av免费观看| 色黄久久久久久| 久久综合社区| 激情视频免费网站| 亚洲国产一区二区三区青草影视| 黄色软件在线观看| av资源一区二区| 日韩成人午夜电影| 久一视频在线观看|