精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美一区二区在线免费播放| 国产综合久久久久影院| 亚洲欧美成人网| xx欧美撒尿嘘撒尿xx| 婷婷在线播放| 99精品国产热久久91蜜凸| 国产精品一区二区三| 久久久久亚洲av片无码下载蜜桃| 欧美女王vk| 日韩午夜三级在线| 粗暴91大变态调教| 超碰97免费在线| 国产精品久久久久久久久免费丝袜 | 欧美另类久久久品| 男女私大尺度视频| 国产淫片在线观看| 久久伊人中文字幕| 91视频免费在线观看| 精品人妻一区二区三区潮喷在线| 欧美激情aⅴ一区二区三区| 99视频超级精品| 国产午夜精品一区二区三区视频| 91啪国产在线| 姑娘第5集在线观看免费好剧| 影音先锋久久久| 久久精品在线视频| 欧美福利第一页| 日韩免费电影在线观看| 欧美一级在线观看| 91pony九色| 免费欧美电影| 日韩欧美999| 青青青青草视频| 免费污视频在线观看| 日韩一区中文字幕| 一本色道久久99精品综合| 久草在线网址| 久久精品一区二区三区不卡牛牛 | 亚洲欧美另类图片小说| 无码免费一区二区三区免费播放 | 亚洲AV无码精品色毛片浪潮| 精品一二三四区| 国产精品日韩av| 瑟瑟视频在线免费观看| 日本在线不卡视频| 国产精品精品国产| 中文字幕免费高清网站| 日韩精品一级中文字幕精品视频免费观看 | 91视频综合网| 亚洲视频电影在线| 美女av一区二区三区| www.99re7| 欧美一区二区| 欧美贵妇videos办公室| 国产一级片久久| 亚洲天堂黄色| 69av成年福利视频| 丁香社区五月天| 日韩国产欧美在线观看| 国产精品久久久久影院日本| 中文区中文字幕免费看| 欧美aⅴ一区二区三区视频| 国产精品久久久久久久久男| 一区二区视频网| 狠狠色丁香婷婷综合久久片| 91在线观看免费观看| 亚洲成人久久精品| 不卡一区二区三区四区| 欧美极品一区| 99中文字幕一区| 亚洲欧美日韩国产综合| 男人天堂新网址| 久草在线资源福利站| 欧美亚洲综合视频| 亚洲国产三级在线| 日日橹狠狠爱欧美超碰| 日韩高清不卡| 91精品国模一区二区三区| 国产免费a级片| 国产成人久久| 久久精品国产亚洲精品| 日本学生初尝黑人巨免费视频| 性欧美videos另类喷潮| 国产精品露脸av在线| 99视频在线观看免费| 波多野结衣中文字幕一区二区三区| 欧美h视频在线| 欧美18一19xxx性| 亚洲大片精品永久免费| 天天爽夜夜爽一区二区三区| 伊人www22综合色| 亚洲欧洲在线播放| 免费成年人视频在线观看| 亚洲久久成人| 国产在线不卡精品| 午夜福利一区二区三区| 国产精品国产三级国产aⅴ中文 | 噜噜爱69成人精品| 91久久久国产精品| 香蕉视频911| 亚洲色图欧洲色图| 超碰影院在线观看| 99精品国产高清一区二区麻豆| 亚洲色图五月天| 精品视频在线观看免费| 男人的j进女人的j一区| 国产在线一区二| www免费在线观看| 在线观看日韩国产| 午夜不卡久久精品无码免费| 久久亚洲成人| 91成品人片a无限观看| 国产乱色精品成人免费视频| 久久精品男人的天堂| 国产曰肥老太婆无遮挡| 亚洲成人精品综合在线| 日韩久久免费电影| 久久久久久久久久久97| 黄页网站大全一区二区| 日韩国产高清一区| 一本大道色婷婷在线| 欧美成人精品高清在线播放 | 午夜精品一区二区三区三上悠亚| 亚洲欧美日韩精品一区| 精品一区电影| 欧美在线激情视频| 同心难改在线观看| 亚洲国产精品影院| 国产精品成人免费一区久久羞羞| 99精品一区| 国产欧美日韩亚洲精品| 国产综合在线观看| 色呦呦网站一区| 欧美在线一级片| 欧美色综合网| 97久久人人超碰caoprom欧美| 日本高清视频在线观看| 欧美午夜精品一区| www.日本高清视频| 三级成人在线视频| 色综合电影网| 美女久久久久久| 色视频www在线播放国产成人| 亚洲精品国产无码| 国产视频在线观看一区二区三区| 日韩人妻精品无码一区二区三区| 青青一区二区| 欧美有码在线视频| 九色视频成人自拍| 欧美综合色免费| 欧美激情 一区| 麻豆精品新av中文字幕| 亚洲在线观看一区| 香蕉久久一区| 欧美成人一区二区三区电影| 亚洲精品网站在线| 婷婷中文字幕综合| 少妇户外露出[11p]| 久久中文在线| 伊人色综合影院| 91午夜精品| 91精品国产高清自在线看超| 可以在线观看的av| 欧美日韩精品高清| 精品99久久久久成人网站免费| 国产成人99久久亚洲综合精品| 亚洲精品国久久99热| 天天爱天天做天天操| 日本在线视频一区二区三区| 欧美福利在线观看| 亚洲欧美日韩免费| 欧美三电影在线| 欧美成人片在线观看| 成人99免费视频| av片中文字幕| 亚洲一区二区三区| 国产精品视频免费一区二区三区| 欧美黑人粗大| 久久精品成人一区二区三区| 免费观看黄色一级视频| 色诱视频网站一区| 国产精品视频一区二区三| 成人黄色大片在线观看| 精品日韩久久久| 亚洲五月婷婷| 亚洲国产成人不卡| 中文字幕日韩高清在线| 国产精品成人一区二区三区吃奶| 污污的网站在线看| 亚洲人成电影网站| www.日韩在线观看| 一本久道久久综合中文字幕| 国产67194| 久久久久久电影| 岛国精品一区二区三区| 奇米888四色在线精品| 亚洲色成人www永久在线观看| 欧美亚洲精品在线| 国产午夜精品一区| 日韩午夜视频在线| 1769国产精品| 啪啪免费视频一区| 永久免费精品影视网站| 欧美自拍偷拍第一页| 在线观看91精品国产麻豆| 高清乱码免费看污| 亚洲大片在线观看| 国产av无码专区亚洲av毛网站| 国产视频一区不卡| 亚洲 欧美 日韩在线| 国产综合久久久久久久久久久久| 国产裸体舞一区二区三区| 亚洲手机在线| 特级西西444| 色综合久久网| 日韩欧美一区二区三区四区 | 亚洲成人精品久久| 国产成年妇视频| 欧美日韩成人综合| 成人毛片一区二区三区| 欧美日韩在线视频一区| 久久综合亚洲色hezyo国产| 日韩美女久久久| 国产在线免费av| 国产婷婷一区二区| av中文字幕免费观看| 9久草视频在线视频精品| 亚洲成人激情小说| 精品一区在线看| 色戒在线免费观看| 奇米色一区二区| 狠狠热免费视频| 日韩av电影免费观看高清完整版| 成人在线观看黄| 欧美一级视频| 凹凸日日摸日日碰夜夜爽1| 日韩不卡高清视频| 亚洲欧美另类综合偷拍| 亚洲欧美精品aaaaaa片| 亚洲同性gay激情无套| 日韩激情小视频| 亚洲人成在线播放网站岛国| 亚洲精品卡一卡二| 一区二区三区四区激情| 欧美黄色免费在线观看| 亚洲一区精品在线| 国产一级免费观看| 天天操天天色综合| 精品不卡一区二区| 在线看不卡av| 中文字幕自拍偷拍| 欧美一级电影网站| 午夜精品小视频| 亚洲国产欧美一区二区三区同亚洲 | 日本中文不卡| 久久伦理在线| 热久久最新网址| 影音先锋久久精品| 欧美牲交a欧美牲交aⅴ免费真| 媚黑女一区二区| 奇米影音第四色| 国产精品自拍av| 亚洲天堂2024| 国产夜色精品一区二区av| 影音先锋男人在线| 亚洲色图一区二区| 久久久国产精品黄毛片| 精品国产91久久久久久老师| 日批视频免费在线观看| 欧美人xxxx| 性生交大片免费看女人按摩| 精品无码久久久久久国产| 国产视频网址在线| 久久av中文字幕| av资源中文在线| 国产精品黄页免费高清在线观看| 99精品美女视频在线观看热舞| 99久久伊人精品影院| 亚洲欧洲美洲国产香蕉| 正义之心1992免费观看全集完整版| 欧美fxxxxxx另类| 日日摸日日碰夜夜爽av| 精品一区二区综合| 免费的av网站| 亚洲欧美一区二区三区久本道91| 日本中文字幕在线免费观看| 精品视频在线免费| 丰满熟妇乱又伦| 国产一区二区三区精品久久久| 中国av在线播放| 国产成人啪精品视频免费网| 亚洲高清999| 日韩美女一区| 99精品久久| 热久久久久久久久| 久久综合成人精品亚洲另类欧美 | 91久久精品久久国产性色也91| 国产日韩三级| aaa免费在线观看| 久久久久免费| 大尺度在线观看| 亚洲欧洲国产日本综合| 天天干天天干天天| 日韩一区二区在线看片| 国产黄在线播放| 久久人人爽人人爽人人片av高清| 亚洲精品tv| 日韩和欧美的一区二区| 亚洲免费大片| 免费看三级黄色片| 自拍偷拍亚洲激情| 中文字幕69页| 日韩精品在线影院| av电影在线免费| 91视频网页| 在线成人超碰| 不卡中文字幕在线观看| julia中文字幕一区二区99在线| 91精品久久久久久久99蜜桃| 欧美视频亚洲图片| 国产99精品在线观看| 亚洲电影第三页| 中国特级黄色大片| 欧美国产日本韩| 少妇一级淫片免费放中国| 日韩色在线观看| 黄色在线视频网站| 国产精品普通话| 成人中文在线| 91色国产在线| 国产欧美日韩精品一区| 日本中文不卡| 欧美女激情福利| 亚洲精品mv在线观看| 国产精品青草久久| 国产成人精品网| 亚洲国产成人在线播放| 伊人在我在线看导航| 亚洲一区中文字幕在线观看| 亚洲电影影音先锋| 亚洲免费在线播放视频| 自拍偷拍国产精品| 国产美女精品视频国产| 久久久精品在线观看| www.久久99| 91视频 - 88av| 成人av免费网站| 国产精品男女视频| 亚洲女人天堂成人av在线| 三妻四妾完整版在线观看电视剧| 黑人巨大精品欧美一区二区小视频| 99在线精品视频在线观看| 在线 丝袜 欧美 日韩 制服| 欧美日韩国产在线看| 日韩午夜影院| 国产精品com| 国产精品久久久久蜜臀| 亚洲成人激情小说| 午夜天堂影视香蕉久久| 亚洲日本在线播放| 国产va免费精品高清在线观看| 精品国产精品| 久久久久亚洲av无码麻豆| 亚洲午夜视频在线观看| 色鬼7777久久| 国产精品视频区1| 一区二区三区午夜探花| 日韩Av无码精品| 日本韩国一区二区三区| 美女写真理伦片在线看| av成人观看| 免费在线亚洲欧美| 亚洲人与黑人屁股眼交| 精品国产免费人成在线观看| 松下纱荣子在线观看| 亚洲图片欧洲图片日韩av| 国产高清亚洲一区| 日日摸天天添天天添破| 日韩视频免费中文字幕| 国内精品偷拍| 国产97色在线 | 日韩| 亚洲人亚洲人成电影网站色| 五月婷婷六月丁香| 成人网在线视频| 亚洲欧美视频| 欧美日韩在线国产| 国产亚洲精品综合一区91| 欧美1区2区3| 亚洲狼人综合干| 亚洲国产综合91精品麻豆| 成人影院免费观看| 成人欧美一区二区| 免费观看日韩电影| 日韩xxxxxxxxx| 精品久久久91| 亚洲区小说区| aaa黄色大片| 欧美日韩在线播| 欧产日产国产精品视频| 日韩中文在线字幕|