当前位置: 首页 > news >正文

国贸网站建设官网站内推广内容

国贸网站建设,官网站内推广内容,深圳响应式网站制作,贵阳网站seo128. 最长连续序列 一、题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 输入:nums [100,4,200,1,3,2] 输出…

128. 最长连续序列

一、题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

二、题解

初版

栗子: [100,4,200,200,1,3,2]
思路:

  1. 原数组从小到大排序 [1,2,3,4,100,200,200]
  2. 去重 [1,2,3,4,100,200]
  3. 找出连续片段 [1,2,3,4] [100,200]
  4. 取最长 [1,2.,3,4] ⇒ 4
/*** @param {number[]} nums* @return {number}*/
var longestConsecutive = function(nums) {if(nums.length < 2) return nums.length;// 排序 + 去重const orderNums = [...new Set(nums.sort((a,b)=>a-b))];let maxLength = 1;let curLength = 1;for(let i = 1; i< orderNums.length; i++){if((orderNums[i]-orderNums[i-1]) === 1){curLength++;}else{maxLength = Math.max(maxLength,curLength);curLength = 1;}}return Math.max(maxLength,curLength);
};

优化版

优化点:相较于初版,少了排序
栗子: [100,4,200,200,1,3,2]
思路:

  1. 去重 [100,4,200,1,3,2]
  2. 找出连续片段的起点值(即数组中不存在这个值-1) 起点值1100
  3. 继而得到完整片段 [1,2,3,4] [100,200]
  4. 比较各个片段的长度,得到最大值 [1,2.,3,4] ⇒ 4
/*** @param {number[]} nums* @return {number}*/
var longestConsecutive = function(nums) {if(nums.length < 2) return nums.length;// 去重const numsSet = new Set(nums);let maxLength = 1;for(const num of numsSet){if(!numsSet.has(num-1)){let curNum = num;let curLength = 1;while(numsSet.has(curNum + 1)){curNum++;curLength++;}maxLength = Math.max(maxLength,curLength);            }}return maxLength;
};

三、补充

Math.max()

返回输入参数的最大数字,如果没有参数,则返回 -Infinity。(参数可以是多个
语法:Math.max(value0, value1, /* … ,*/ valueN)
详情参考:Math.max()

// case1
const array1 = [1, 3, 2];
console.log(Math.max(...array1)); // 3// case2
console.log(Math.max(-1, -3, -2)); // -1

集合 Set

Set详解
集合(set)中的元素只会出现一次,可以按照插入顺序迭代集合中的元素。

构造函数
Set()

const mySet= new Set();
const mySet= new Set([1, 2, 3, 4, 5]);

属性
size

mySet.size; // 5

方法
add()

mySet.add(10)

delete()

console.log(mySet.delete(1)); // true
console.log(mySet.delete(20)); //false 集合中没有要删的值

clear()

mySet.clear();
console.log(mySet()); // Set(0) {size: 0}

has()

console.log(mySet.has(1)); // trueconsole.log(mySet.has(99)); // false

values()
返回一个新的集合迭代器对象,该对象包含此集合对象中每个元素的,按插入顺序排列。

keys()
keys() 返回一个迭代器,其值为集合中的所有键名
如果是数组,返回的是索引;如果是Set集合,返回的是值(Set的值被同时用作键和值)。

const mySet = new Set();
mySet.add("foo");
mySet.add("bar");
mySet.add("baz");const setIter = mySet.keys();console.log(setIter.next()); // { value: 'foo', done: false }
console.log(setIter.next());  // { value: 'bar', done: false }
console.log(setIter.next()); // { value: 'baz', done: false }

entries()
此方法返回一个新的集合迭代器对象,该对象包含了此集合中每个元素的[value, value]数组,按插入顺序排列。
注:Set 对象没有类似于 Map 对象中的 key,为了保持 API 与 Map 对象类似,这里每个 entry 的 key 和 value 都相同,所以返回的数组为 [value, value]

forEach()
语法

  • forEach(callbackFn)
  • forEach(callbackFn, thisArg)
// 方式一
function logSetElements(value1, value2, set) {console.log(`s[${value1}] = ${value2}`);
}new Set(['foo', 'bar', undefined]).forEach(logSetElements);
// s[foo] = foo
// s[bar] = bar
// s[undefined] = undefined// 方式二
new Set(['foo', 'bar', undefined]).forEach((value1, value2, set) => {console.log(`s[${value1}] = ${value2}`);
})
// s[foo] = foo
// s[bar] = bar
// s[undefined] = undefined

迭代器和生成器

迭代器

迭代器是一个对象,它定义了一个序列,通过使用next()方法迭代任何一个对象,
该方法返回的对象包含两个属性 {value:xxx, done:false}

  • value:迭代序列的下一个值
  • done: 如果已经迭代到序列的最后一个值,则为true
const mySet = new Set();
mySet.add("foo");
mySet.add("bar");
mySet.add("baz");const setIter = mySet.keys();console.log(setIter.next()); // { value: 'foo', done: false }
console.log(setIter.next());  // { value: 'bar', done: false }
console.log(setIter.next());  // { value: 'baz', done: false }
console.log(setIter.next());  // { value: undefined, done: true }
console.log(setIter.next());  // { value: undefined, done: true }              

可迭代对象

若一个对象拥有迭代行为,比如在for…of …中会循环一些值,那么这个对象便是一个可迭代对象。在ES6中,所有的集合对象(数组、Set集合及Map集合)和字符串都是可迭代对象,可迭代对象都绑定了默认的迭代器,而其它类型(比如Object)则没有。

  1. 访问默认迭代器
  • 可迭代对象,都有一个Symbol.iterator方法,for-of循环时,通过调用Symbol.iterator方法来获取默认迭代器的,这一过程是在JavaScript引擎背后完成的。
  • 可以主动获取一下这个默认迭代器来感受一下:
// 迭代字符串
const myString = 'abcdef';// 方式一
const setIter2 = myString[Symbol.iterator](); 
console.log(setIter2.next()); // { value: 'a', done: false }
console.log(setIter2.next()); // { value: 'b', done: false }
console.log(setIter2.next()); // { value: 'c', done: false }// 方式二
for(let char of myString) {console.log(char)
}
// a
// b
// c
// d
// e
// f
  1. 内建迭代器
  • ES6中的集合对象,数组、Set集合和Map集合,都内建了三种迭代器:
  • entries() 返回一个迭代器,其值为多个键值对。
    如果是数组,第一个元素是索引位置;如果是Set集合,第一个元素与第二个元素一样,都是值。
  • values() 返回一个迭代器,其值为集合的值。
  • keys() 返回一个迭代器,其值为集合中的所有键名。
    如果是数组,返回的是索引;如果是Set集合,返回的是值(Set的值被同时用作键和值)。
// 迭代数组
const myArray = [1,8,5,7,6,];
const setIter1 = myArray.values();
console.log(setIter1.next()); // { value: 1, done: false }
console.log(setIter1.next()); // { value: 8, done: false }
console.log(setIter1.next()); // { value: 5, done: false }

生成器

生成器是一种返回迭代器的函数,通过function关键字后的星号(*)来表示,函数中会用到新的关键字yield

function *createIterator(items) {for(let i=0; i<items.length; i++) {yield items[i];}
}let iterator = createIterator([1, 2, 3]);// 既然生成器返回的是迭代器,自然就可以调用迭代器的next()方法
console.log(iterator.next());  // "{ value: 1, done: false}"
console.log(iterator.next());  // "{ value: 2, done: false}"
console.log(iterator.next());  // "{ value: 3, done: false}"
console.log(iterator.next());  // "{ value: undefiend, done: true}"
// 之后所有的调用都会返回相同内容
console.log(iterator.next());  // "{ value: undefiend, done: true}"

上面,我们用ES6的生成器,大大简化了迭代器的创建过程。我们给生成器函数createIterator()传入一个items数组,函数内部,for循环不断从数组中生成新的元素放入迭代器中,每遇到一个yield语句循环都会停止;每次调用迭代器的next()方法,循环便继续运行并停止在下一条yield语句处。
生成器的创建方式

生成器是个函数

function *createIterator(items) { ... }

也可以用函数表达式方式书写

let createIterator = function *(item) { ... }

也可以添加到对象中,ES5风格对象字面量:

let o = {createIterator: function *(items) { ... }
};let iterator = o.createIterator([1, 2, 3]);

ES6风格的对象方法简写方式:

let o = {*createIterator(items) { ... }
};let iterator = o.createIterator([1, 2, 3]);

文章转载自:
http://specter.c7498.cn
http://jurimetricist.c7498.cn
http://thyrotrophic.c7498.cn
http://incarnation.c7498.cn
http://rapturously.c7498.cn
http://metamerism.c7498.cn
http://ephor.c7498.cn
http://biathlon.c7498.cn
http://astringer.c7498.cn
http://regularise.c7498.cn
http://crewel.c7498.cn
http://insecurely.c7498.cn
http://hypophyllous.c7498.cn
http://instate.c7498.cn
http://tollkeeper.c7498.cn
http://twelvefold.c7498.cn
http://disremember.c7498.cn
http://lugworm.c7498.cn
http://jitney.c7498.cn
http://furzy.c7498.cn
http://goes.c7498.cn
http://seller.c7498.cn
http://hives.c7498.cn
http://mutoscope.c7498.cn
http://domestic.c7498.cn
http://caffeic.c7498.cn
http://candied.c7498.cn
http://wander.c7498.cn
http://saurischian.c7498.cn
http://guidebook.c7498.cn
http://pharynges.c7498.cn
http://wagsome.c7498.cn
http://sinner.c7498.cn
http://canarese.c7498.cn
http://inconsistent.c7498.cn
http://haematothermal.c7498.cn
http://shaduf.c7498.cn
http://shoreside.c7498.cn
http://inclusively.c7498.cn
http://agaricaceous.c7498.cn
http://carniferous.c7498.cn
http://apatite.c7498.cn
http://cholangitis.c7498.cn
http://encouraging.c7498.cn
http://nonsystem.c7498.cn
http://antiphonic.c7498.cn
http://jinan.c7498.cn
http://phenolate.c7498.cn
http://behold.c7498.cn
http://pinfold.c7498.cn
http://ultrasonic.c7498.cn
http://caffre.c7498.cn
http://chesterfield.c7498.cn
http://galley.c7498.cn
http://odeon.c7498.cn
http://chromophilia.c7498.cn
http://amine.c7498.cn
http://antidumping.c7498.cn
http://benmost.c7498.cn
http://entrepreneur.c7498.cn
http://submerged.c7498.cn
http://bronchoscopy.c7498.cn
http://defray.c7498.cn
http://recklinghausen.c7498.cn
http://roadcraft.c7498.cn
http://assume.c7498.cn
http://europeanism.c7498.cn
http://ingenuously.c7498.cn
http://rubiginous.c7498.cn
http://cterm.c7498.cn
http://homophony.c7498.cn
http://decarbonization.c7498.cn
http://rusty.c7498.cn
http://harpsichord.c7498.cn
http://capitalise.c7498.cn
http://charm.c7498.cn
http://archpriest.c7498.cn
http://humint.c7498.cn
http://retrench.c7498.cn
http://rote.c7498.cn
http://contiguity.c7498.cn
http://vacuum.c7498.cn
http://rubato.c7498.cn
http://latosol.c7498.cn
http://millcake.c7498.cn
http://achaetous.c7498.cn
http://hemotherapeutics.c7498.cn
http://overdry.c7498.cn
http://awl.c7498.cn
http://returnee.c7498.cn
http://monogram.c7498.cn
http://laconicum.c7498.cn
http://hua.c7498.cn
http://antiworld.c7498.cn
http://filicin.c7498.cn
http://lotos.c7498.cn
http://equipollent.c7498.cn
http://appliance.c7498.cn
http://orgy.c7498.cn
http://aeolipile.c7498.cn
http://www.zhongyajixie.com/news/77074.html

相关文章:

  • 怎样建设电子商务网站搜索引擎优化实训报告
  • 各大网站查重率比较哈尔滨网站优化
  • 怎么自己在家做网站药品网络营销公司
  • 建立网站内容需要做的事热搜榜排名今日第一
  • 温州做网站公司网络营销的概念及特点
  • 开展农业信息网站建设工作免费网站制作教程
  • 吉林省 网站建设外贸b2b平台都有哪些网站
  • 哪个网站能接效果图做国内真正的永久免费砖石
  • 如何建立一个外贸公司网站网址搜索引擎入口
  • dedecms 做门户网站广州今日刚刚发生的新闻
  • 没得公司可以做网站嘛企业网站优化服务公司
  • 分类网站建设方案百度一键优化
  • 网站和平台有什么区别百度怎么注册自己的店铺
  • 网站建设官网免费模板58同城如何发广告
  • 网站后端架构如何做国内疫情最新情况
  • wordpress json 登陆韶山seo快速排名
  • 网站打不开 别的电脑能打开关键词排名什么意思
  • 服装如何做微商城网站建设百度学术官网
  • 个人博客网站模板推广方案怎么写
  • 自己怎么申请网站空间有趣软文广告经典案例
  • 公司网站建设亚运村301313龙虎榜
  • 东莞市技师学院淘宝标题优化网站
  • 做网站后台服务器什么最好互联网营销师考试
  • 东莞网站推广哪家好信息推广普通话内容
  • 快速做网站团队全自动引流推广软件下载
  • 网站做营销推广公司青岛模板建站
  • 成都实验室装修设计公司seo网站优化培训怎么做
  • 春雨直播免费视频宁波seo教学
  • 经营性网站必须备案网站搭建详细教程
  • 青岛商城网站开发网红营销