热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS:数组双指针,优势洗牌,区间交集(fail)

基本的数组双指针的题目大致如下:剩下两题,两题都是思想为主,与双指针沾边。优势洗牌(中等),f

基本的数组双指针的题目大致如下:剩下两题,两题都是思想为主,与双指针沾边。
在这里插入图片描述


优势洗牌 (中等),fail

田忌赛马,打得过就打,打不过就拿自己的垃圾和对方的精锐互换。

我原本的思路:
是不对nums2排序,遍历nums2,每次都要与nums1逐个比较,而且涉及nums1的删除操作,感觉也行不通。

nums2 中元素的顺序不能改变,因为计算结果的顺序依赖 nums2 的顺序,所以不能直接对 nums2 进行排序,而是利用其他数据结构(保存原来索引和值的对象)来辅助。

[1,10,4,11]
map转成数组[,原索引],再倒序排序
[ [ 11, 3 ], [ 10, 1 ], [ 4, 2 ], [ 1, 0 ] ]

核心思想将齐王和田忌的马按照战斗力排序,然后按照排名一一对比。如果田忌的马能赢,那就比赛(右指针),如果赢不了,那就换个垫底的来送人头(左指针),保存实力。而且不用考虑排名第二的与排名第一的比较,直接是索引一一对比,这是两个数组都排序的好处。 有一点贪心算法

/*** @param {number[]} nums1* @param {number[]} nums2* @return {number[]}*/
var advantageCount = function(nums1, nums2) {let len = nums1.lengthnums1.sort((x,y) => x-y) //升序let obj2 = nums2.map((val, ind) => [val, ind])obj2.sort((x,y) => y[0]-x[0]) //降序// console.log(obj2)let left=0, right=len-1; // nums1指针let i=0; //obj2指针let ans = new Array(len).fill(0)// 从nums2最强的开始比, nums1比得过就自己上,否则用最小值混一下for(let val2 of obj2){if(val2[0] < nums1[right]) {ans[val2[1]] = nums1[right]; //在nums2原顺序上填值right--}else{ans[val2[1]] = nums1[left];left++;}}return ans;
};

在这里插入图片描述


986. 区间列表的交集 (中等)fail

区间问题
在这里插入图片描述
在这里插入图片描述


  1. 什么情况下这两个区间没有交集:if b2
  2. 否命题——什么情况下,两个区间存在交集呢?if b2 >= a1 and a2 >= b1:
  3. 两个区间存在交集的情况有哪些呢?
    如果交集区间是[c1,c2],那么c1=max(a1,b1), c2=min(a2,b2)
  4. 数组的索引iiijjj肯定要前进(递增)的,什么时候应该前进呢?
    取决于a2和b2的大小关系。
    在这里插入图片描述

/*** @param {number[][]} firstList* @param {number[][]} secondList* @return {number[][]}*/
var intervalIntersection = function(firstList, secondList) {let i=j=0, ans=[];while (i<firstList.length && j<secondList.length){let [a1, a2] = firstList[i];let [b1, b2] = secondList[j];if (b2>=a1 && a2>=b1) { //有交集ans.push([Math.max(a1,b1), Math.min(a2,b2)])}b2>a2 ? i++ : j++}return ans;
};

在这里插入图片描述


推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
author-avatar
知心friend2007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有