ItIron2021
Javascript
昨天我们跑了一个本系列最~简单的题目之一,想必应该有好好放松到吧! 那今天就稍微把难度再拉回来一点吧! 马上来看一下之前在外商面试时遇到的一个题目吧!
今有两unique阵列,请说明你要如何找出两阵列中重复的元素
当你连续被骗了好几次後,我想你这次学乖了,你要先厘清问题。因此你的第一个问题应该是什麽是unique阵列? 很好的问题,这也是当时我第一个问的问题,第一次面试又是英文,听到unique array我整个傻了一下?
面试官接着定义了所谓的unique阵列,也就是阵列中本身就没有任何重复的元素,同时她还加了一个条件让事情更简单,这两个阵列中都只有数字,最後请以阵列的方式回传结果,好了,请作答!
这个问题同样有着非常多的解法,我们就随便讲一个吧!
我绝对不是在复制贴上..不过当你没招时从最基本想就对了! 我们可以用以下的思路配合回圈解这一道题目
迭代阵列1或阵列2,若里面有与另一个阵列重复的元素便将该元素推进结果阵列
为了方便我说明,我们先假设两阵列为以下
const arr1 = [1, 5, 8, 9, 10, 11, 17]
const arr2 = [1, 2, 17, 23, 28, 32]
范例有了、基本想法也有了,那就用for loop写看看吧!
const result = []
for (let i = 0; i < arr1.length; i++) {
if (arr2.includes(arr1[i])) {
result.push(arr1[i])
}
}
console.log(result) // [1, 17]
同样的概念你也可以用ES6之後的语法糖来写,.filter一样可以把任务完成得很漂亮
const result = arr1.filter(num => arr2.includes(num))
console.log(result) // [1, 17]
好了,现在题目回答完毕了,面试官问了你下一个问题
那请问你这个解法的时间复杂度是?
嘿嘿,成功带到我今天想谈的概念之一了,计画通?
当你回答这类演算法的题目时,其实有不少的人会开始关心起所谓的Big O Notation & Time Complexity,简单来说就是衡量你演算法效能的一种指标,简易的说明你的解法在最坏情况下(也就是资料量变大的时候)的表现,大致上分为以下的4种类型
一般来说我们会试着避免最後一种指数型的情况,如果以上的内容你完全没有任何概念或是觉得看了天书,那请利用今天提供的关键字去做基本的了解并学会如何计算你的演算法时间复杂度!
顺带一题,由於跑了双回圈,我们这个解法的时间复杂度很遗憾的为O(n^2)。
以下附上我当时给的O(n)解法,但当时我实在太紧张,讲得零零落落的XD
const result = []
const DIC = {}
for (let i = 0; i < arr1.length; i++) {
// 统计在arr1出现过的数字
DIC[arr1[i]] = 1
}
for (let i = 0; i < arr2.length; i++) {
// 若跑到的数字已存在DIC,表示重复,推到结果阵列
if (DIC[arr2[i]]) {
result.push(arr2[i])
}
}
console.log(result) // [1, 17]
Big O Notation & Time Complexity
本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!
<<: D28 - 走!去浏览器玩转黑胶唱片 Web Audio API
来到了第四天,还在第一个练习,但每天都有一点不一样的收获, 今天练习到在Shape 底下加使用Rep...
前言 在 React hooks 中 useImperativeHandle 是一个相对较少使用的 ...
*** 模组资料夹 payment_sinopac 以 "/" 来代表此资料夹 ...
认识过网站的基础後,接下来可以多观察生活中的范例做练习,选择几个成效不错的网站去做比较与分析,以下整...
“代表性状态转移(REST)是一种软件体系结构样式,它定义了一组用於创建Web服务的约束。” 资料来...