【JavaScript】LeetCode:86-90

文章目录

  • 86 只出现一次的数字
  • 87 颜色分类
  • 88 下一个排列
  • 89 寻找重复数
  • 90 前K个高频元素

86 只出现一次的数字

在这里插入图片描述

  • 异或
  • x ^ x = 0,x ^ 0 = x,相同为0,相异为1,且满足交换律。
  • 例如:[4, 1, 2, 1, 2] => 1 ^ 1 ^ 2 ^ 2 ^ 4 = 0 ^ 0 ^ 4 = 0 ^ 4 = 4,最后的结果即为重复一次的数字。
/*** @param {number[]} nums* @return {number}*/
var singleNumber = function(nums) {let res = 0;for(let item of nums){res ^= item;}return res;  
};

87 颜色分类

在这里插入图片描述

  • 双指针
  • i 指向0的下一个位置,j 指向1的下一个位置。
  • k 遍历数组,① 若该位置为0,则将当前数与 i 指向的数进行交换,i 和 j 指针都向后移动一位;② 若该位置为1,则将当前数与 j 指向的数进行交换,j 指针向后移动一位。
  • 注意:情况①时,若 i < j,则说明 i 指向的数为1,做交换时会把1换到后面去(即k指向的数),应该将当前数与 j 指向的数进行交换,把1换回去。
/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var sortColors = function(nums) {let i = 0, j = 0;for(let k = 0; k <= nums.length; k++){if(nums[k] == 0){[nums[i], nums[k]] = [nums[k], nums[i]];if(i < j){[nums[j], nums[k]] = [nums[k], nums[j]];}i++;j++;}else if(nums[k] == 1){[nums[j], nums[k]] = [nums[k], nums[j]];j++;}}
};

88 下一个排列

在这里插入图片描述

  • 例子:数组nums = [1, 2, 3, 5, 4]。
  • 从后往前遍历数组,查找第一个升序的数对,记为 i 和 j 。
    i = 3,j = 5。
  • 从后往前遍历数组,查找第一个 > nums[i]的数,记为tmp。
    tmp = 4。
  • 交换nums[i]和nums[tmp]。
    nums = [1, 2, 4, 5, 3]。
  • 将 i 后面的元素按升序进行排序,得到结果。
    nums = [1, 2, 4, 3, 5]。
/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var nextPermutation = function(nums) {let len = nums.length;let i = len - 2, j = len - 1;while(i >= 0){if(nums[i] < nums[j]){break;}i--, j--;}let tmp = -1;for(let k = len - 1; k > i; k--){if(nums[k] > nums[i]){tmp = k;break;}}[nums[tmp], nums[i]] = [nums[i], nums[tmp]];let right = nums.slice(j, len);right.sort((a, b) => a - b);let n = 0, m = i + 1;while(m < len){nums[m] = right[n];m++, n++;}
};

89 寻找重复数

在这里插入图片描述

  • 快慢指针找环形链表的入口。
  • 创建一个链表,节点为[0, 1, …, n],nums索引值 i 的next为nums[i]。
  • 若存在重复元素s,链表中一定会同时有两条边指向节点x,节点x即为环的入口。
  • 例如:nums = [1, 3, 4, 2, 2],链表为:0 => 1,1 => 3,2 => 4,3 => 2,4 => 2,这里可以发现,2为环形链表的入口,即为重复元素。
var next = function(nums, index){return nums[index];
}/*** @param {number[]} nums* @return {number}*/
var findDuplicate = function(nums) {let slow = 0, fast = 0;while((slow == 0 && fast == 0) || slow != fast){fast = next(nums, next(nums, fast));slow = next(nums, slow);}slow = 0;while(slow != fast){slow = next(nums, slow);fast = next(nums, fast);}return slow;
};

90 前K个高频元素

在这里插入图片描述

  • 最小堆

    节点索引值
    当前节点i
    父节点(i - 1) / 2向下取整
    左孩子2 * i + 1
    右孩子2 * i + 2
    最后一个非叶子节点(length - 2) / 2向下取整
  • 自上往下:与左右孩子进行比较,若均 > 左右孩子,则与左右孩子中较小值交换,否则与 < 自身的孩子交换。

  • 自下往上:与父节点进行比较,若 > 父节点,则与父节点交换。

  • push():插入末尾,然后自下而上判断一次。

  • pop():取出堆顶元素,将堆中最后一个元素与堆顶元素交换,然后自上往下判断一次。

/*** @param {number[]} nums* @param {number} k* @return {number[]}*/
class Heap {constructor(comparator = (a, b) => a - b, data = []){this.data = data;this.comparator = comparator;this.heapify();}heapify(){if(this.size() < 2) return;for(let i = Math.floor(this.size() / 2) - 1; i >= 0; i--){this.bubbleDown(i);}}peek(){if(this.size() === 0) return null;return this.data[0];}insert(value){this.data.push(value);this.bubbleUp(this.size() - 1);}pop(){if(this.size() == 0){return null;}const result = this.data[0];const last = this.data.pop();if(this.size() != 0){this.data[0] = last;this.bubbleDown(0);}return result;}bubbleUp(index){while(index > 0){const parentIndex = Math.floor((index - 1) / 2);if(this.comparator(this.data[index], this.data[parentIndex]) < 0){this.swap(index, parentIndex);index = parentIndex;}else{break;}}}bubbleDown(index){const lastIndex = this.size() - 1;while(true){const leftIndex = index * 2 + 1;const rightIndex = index * 2 + 2;let findIndex = index;if (leftIndex <= lastIndex && this.comparator(this.data[leftIndex], this.data[findIndex]) < 0){findIndex = leftIndex;}if (rightIndex <= lastIndex && this.comparator(this.data[rightIndex], this.data[findIndex]) < 0){findIndex = rightIndex;}if(index != findIndex){this.swap(index, findIndex);index = findIndex;}else{break;}}}swap(index1, index2){[this.data[index1], this.data[index2]] = [this.data[index2], this.data[index1]];}size(){return this.data.length;}
}var topKFrequent = function(nums, k) {const map = new Map();for(const num of nums) {map.set(num, (map.get(num) || 0) + 1);}const priorityQueue = new Heap((a, b) => a[1] - b[1]);for(const items of map.entries()){priorityQueue.insert(items);if(priorityQueue.size() > k){priorityQueue.pop();}}const res = [];for(let i = priorityQueue.size() - 1; i >= 0; i--){res[i] = priorityQueue.pop()[0];}return res;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13492.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CSS回顾-基础知识详解

一、引言 在前端开发领域&#xff0c;CSS 曾是构建网页视觉效果的关键&#xff0c;与 HTML、JavaScript 一起打造精彩的网络世界。但随着组件库的大量涌现&#xff0c;我们亲手书写 CSS 样式的情况越来越少&#xff0c;CSS 基础知识也逐渐被我们遗忘。 现在&#xff0c;这种遗…

Spring Boot编程训练系统:构建可扩展的应用

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足&#xff0c;创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

点云论文阅读-1-pointnet++

pointnet局限性&#xff1a;不能获取局部结构信息 作者提出pointnet需要解决的问题&#xff1a; 如何生成点云的分区&#xff08;需要保证每一个分区具有相似的结构&#xff0c;使学习算法的参数在局部共享&#xff09;如何通过一个局部特征学习算法抽象点云或局部特征 解决…

Summaries 总结

Goto Data Grid 数据网格 Summaries 摘要 Summary Types 摘要类型 Total Summary 总摘要 汇总总数 &#xff08;GridSummaryItem&#xff09; 将针对所有数据网格记录进行计算&#xff0c;并显示在视图页脚中。启用 View 的 OptionsView.ShowFooter 设置以显示视图页脚。 …

MySQL技巧之跨服务器数据查询:基础篇-如何获取查询语句中的参数

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-如何获取查询语句中的参数 上一篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL 以…

unity3d————协程练习题

1.计秒器&#xff1a; void Start(){StartCoroutine(MyCoroutine());}IEnumerator MyCoroutine(){int time 0;while(true){print(time "秒");time;yield return new WaitForSeconds(1);}} 结果&#xff1a; 2.生成多个cude &#xff08;不卡顿&#xff09;&#x…

Go开发指南- Gorouting

目录&#xff1a; (1)Go开发指南-Hello World (2)Go开发指南-Gin与Web开发 (3)Go开发指南-Gorouting Goroutine 在java中我们要实现并发编程的时候&#xff0c;通常要自己维护一个线程池&#xff0c;并且需要去包装任务、调度任务和维护上下文切换。这个过程需要消耗大量的精…

R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记&#xff0c; 快来收藏关注【科研私家菜】 01 机器学习的可解释性 对于集成学习方法&#xff0c;效果虽好&#xff0c;但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型&#xff0c;是由N棵树组成&#xff0c;…

Docker部署青龙面板,实现京东自动签到刷京东,提供脚本

项目简介 青龙面板是一个基于Docker的可视化任务管理系统&#xff0c;用于执行定时任务&#xff0c;如自动签到。 部署安装 安装Docker curl -sSL https://get.docker.com/ | sh 安装Docker-compose 下载 Docker-Compose 二进制包 curl -L https://github.com/docker/compo…

路径穿越浅析

当使用 RouterFunctions 来处理静态资源且资源处理通过 FileSystemResource 进行配置时&#xff0c;攻击者可以通过构造恶意 HTTP 请求&#xff0c;利用路径遍历漏洞获取相关受影响版本文件系统中的任意文件。 主要影响范围&#xff1a; Spring Framework 5.3.0 - 5.3.39 6.…

【网络安全渗透测试零基础入门】之Vulnhub靶场PWNOS: 2.0 多种渗透方法,收藏这一篇就够了!

前言 这是小强给粉丝盆友们整理的网络安全渗透测试入门阶段Vulnhub靶场实战教程 喜欢的朋友们&#xff0c;记得给我点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术。 本文介绍靶机PWNOS: 2.0 的渗透方法&#xff0c;由于靶机系统比较老&#xff0c;尝试了几种…

【缓存策略】你知道 Write Around(缓存绕过写)这个缓存策略吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

JavaScript入门笔记

目录 JavaScript 介绍 1.JavaScript书写位置 1.1内部 js 1.2外部 js 2.输入和输出语法 变量 1.变量是什么 2.变量基本使用 2.1变量的声明 2.2变量的赋值 3.数组 常量 数据类型 1.数据类型 1.1基本数据类型 1.1.1.number: 数字型 1.1.2.string: 字符串型 1.1.…

游戏引擎学习第七天

视频参考:https://www.bilibili.com/video/BV1QFmhYcE69 ERROR_DEVICE_NOT_CONNECTED 是一个错误代码&#xff0c;通常在调用 XInputGetState 或 XInputSetState 函数时返回&#xff0c;表示指定的设备未连接。通常会出现以下几种情况&#xff1a; 未连接控制器&#xff1a;如…

IDE内存不足,这可能会影响性能。请考虑增加堆大小。

警告信息&#xff1a;Low Memory The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 解决方案&#xff1a; 重启即可。

Element plus使用menu时候如何在折叠时候隐藏掉组件自带的小箭头

记录一下工作中使用element plus时候遇到的一个小bug 就是这个小箭头太折磨人了&#xff0c;因为我需要根据路由动态加载menu&#xff0c;所以对这个menu组件进行了一些处理&#xff0c;然后可能是因为破坏了它原来的层级关系吧导致折叠菜单的时候这个小箭头还在&#xff08;官…

语义通信论文略读(七)Contrastive Learning-Based Semantic Communications

Contrastive Learning-Based Semantic Communications 基于对比学习的语义通信 作者: Shunpu Tang, Qianqian Yang, Lisheng Fan, Xianfu Lei, Arumugam Nallanathan, George K. Karagiannidis 所属机构: 广州大学计算机科学与网络安全学院&#xff0c;浙江大学信息科学与电…

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。

技术栈2:Git分布式版本控制工具

目录 1.版本控制器 2.Git概述 3.Git常用命令 4.获取本地仓库 5.基础操作指令 6.gitignore文件 7.分支与合并 8.远程仓库 1.版本控制器 1.1集中式版本控制器 集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&#xff0c;team里每个人work时…

【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】

文章目录 OpenOCD arp_examine 使用 OpenOCD arp_examine 使用 因为我们很多时候运行 Openocd 的时候有些 core 还没有启动, 所以最好在配置脚本中添加 -defer-examine这个参数, 如下&#xff1a; #cortex-m33 target create ${_CHIPNAME}.m33 cortex_m -dap ${_CHIPNAME}.da…