<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
給定兩個陣列 nums1
和 nums2
,返回 它們的交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。
範例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2]
範例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出:[9,4]
解釋:[4,9] 也是可通過的
注:
- 1 <= nums1.length, nums2.length <= 1000
- 0 <= nums1[i], nums2[i] <= 1000
解題思路:
如果兩個陣列是有序的,則可以使用雙指標的方法得到兩個陣列的交集。
首先對兩個陣列進行排序,然後使用兩個指標遍歷兩個陣列。可以預見的是加入答案的陣列的元素一定是遞增的,為了保證加入元素的唯一性,我們需要額外記錄變數 pre 表示上一次加入答案陣列的元素。
初始時,兩個指標分別指向兩個陣列的頭部。每次比較兩個指標指向的兩個陣列中的數位,如果兩個數位不相等,則將指向較小數位的指標右移一位,如果兩個數位相等,且該數位不等於 pre ,將該數位新增到答案並更新 pre 變數,同時將兩個指標都右移一位。當至少有一個指標超出陣列範圍時,遍歷結束。
JavaScript 實現:
var intersection = function(nums1, nums2) { nums1.sort((x, y) => x - y); nums2.sort((x, y) => x - y); const length1 = nums1.length, length2 = nums2.length; let index1 = 0, index2 = 0; const intersection = []; while (index1 < length1 && index2 < length2) { const num1 = nums1[index1], num2 = nums2[index2]; if (num1 === num2) { // 保證加入元素的唯一性 if (!intersection.length || num1 !== intersection[intersection.length - 1]) { intersection.push(num1); } index1++; index2++; } else if (num1 < num2) { index1++; } else { index2++; } } return intersection; };
與 I 相通的類似的一道題:
給你兩個整數陣列 nums1 和 nums2
,請你以陣列形式返回兩陣列的交集。返回結果中每個元素出現的次數,應與元素在兩個陣列中都出現的次數一致(如果出現次數不一致,則考慮取較小值)。可以不考慮輸出結果的順序。
範例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2,2]
範例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出:[4,9]
解題思路:
如果兩個陣列是有序的,則可以使用雙指標的方法得到兩個陣列的交集。
首先對兩個陣列進行排序,然後使用兩個指標遍歷兩個陣列。
初始時,兩個指標分別指向兩個陣列的頭部。每次比較兩個指標指向的兩個陣列中的數位,如果兩個數位不相等,則將指向較小數位的指標右移一位,如果兩個數位相等,將該數位新增到答案,並將兩個指標都右移一位。當至少有一個指標超出陣列範圍時,遍歷結束。
JavaScript 實現:
/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { //將兩個陣列從小到大排序 nums1.sort((a,b) => a-b) nums2.sort((a,b) => a-b) let res = [] let key1 = 0, key2 = 0, index = 0 //在兩個指標不達邊界的前提下不斷推進 while(key1 < nums1.length && key2 < nums2.length){ //判斷nums1[key1]與nums2[key2]的大小,分出大於小於等於三種情況 if(nums1[key1] < nums2[key2]) key1++ else if(nums1[key1] > nums2[key2]) key2++ else{ res[index++] = nums1[key1] key1++ key2++ } } return res };
到此這篇關於JavaScript實現兩個陣列的交集 的文章就介紹到這了,更多相關JS陣列交集 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45