每日一题——LeetCode888

方法一 个人方法:

交换后要达到相同的数量,那么意味着这个相同的数量就是两个人总数的平均值,假设A总共有4个,B总共有8个,那么最后两个人都要达到6个,如果A的第一盒糖果只有1个,那么B就要给出6-(4-1)= 3个才能满足,如果B中恰好有一盒糖果是3个那就满足,如果B没有就考虑A中的下一盒有多少个糖果。

var fairCandySwap = function(aliceSizes, bobSizes) {var aliceNum= aliceSizes.reduce((acc,curr)=>acc+curr,0),bobNum=bobSizes.reduce((acc,curr)=>acc+curr,0)var average = (aliceNum+bobNum)/2,change=[]for(var i=0;i<aliceSizes.length;i++){var exchange = average - (aliceNum-aliceSizes[i])if(bobSizes.indexOf(exchange)!=-1){change.push(aliceSizes[i],exchange)break}}return change
};

消耗时间和内存情况:

消耗时间有点长,应该是bobSizes.indexOf(exchange)这个方法导致的,indexOf本质还是循环查找,就变成了循环嵌套循环,时间复杂度太高了,所以需要优化一下。

查找某个元素是否存在也可以用set集合的has()方法:

var fairCandySwap = function(aliceSizes, bobSizes) {var aliceNum= aliceSizes.reduce((acc,curr)=>acc+curr,0),bobNum=bobSizes.reduce((acc,curr)=>acc+curr,0)var average = (aliceNum+bobNum)/2,change=[]var set = new Set(bobSizes)for(var i=0;i<aliceSizes.length;i++){var exchange = average - (aliceNum-aliceSizes[i])if(set.has(exchange)){change.push(aliceSizes[i],exchange)break}}return change
};

时间明显更短了:

注意 set的查找为什么要更快,之前面试的时候被问到过set查找元素的时间复杂度。

        HashSet使用哈希表来存储元素,并通过哈希码来查找元素的位置。哈希码是通过对元素进行散列函数计算得到的。每个元素在哈希表中都有一个对应的位置,该位置存储了该元素的信息。

        当添加一个新的元素时,HashSet 会对该元素进行哈希计算,并找到该元素在哈希表中的位置。如果该位置已经被占用,则不会添加该元素,因为它已经存在于哈希表中。

        查询元素是否存在于哈希表中也是通过该元素的哈希码找到它在哈希表中的位置,并进行比较。

        由于哈希算法的性质,查找元素、添加元素和删除元素的时间复杂度为 O(1),因此,HashSet 的效率非常高。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四、Spring IoC实践和应用(基于配置类方式管理 Bean)

本章概要 基于配置类方式管理 Bean 完全注解开发理解实验一&#xff1a;配置类和扫描注解实验二&#xff1a;Bean定义组件实验三&#xff1a;高级特性&#xff1a;Bean注解细节实验四&#xff1a;高级特性&#xff1a;Import扩展实验五&#xff1a;基于注解配置类方式整合三层…

域内定位个人PC的三种方式(1)

会话搜集 在cmd下调用query session命令可以获得当前环境下的windows会话 NetSessionEnum 这个函数不允许直接查询是谁登陆&#xff0c;但是它允许查询是谁在访问此工作站的网络资源时所创建的网络会话&#xff0c;从而知道来自何处&#xff0c;此函数不需要高权限即可查询 第…

漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

EA常见画图(类图、包图、构件图、状态图、顺序图、活动图)

EA常见活动图&#xff0c;状态图画法 类图:111&#xff08;1&#xff09;给关系添加注释&#xff08;2&#xff09;设置关系线样式 包图&#xff1a;&#xff08;1&#xff09;创建包图&#xff08;2&#xff09;在包中添加子包&#xff1a;&#xff08;3&#xff09;在包中添加…

【C->Cpp】深度解析#由C迈向Cpp(2)

目录 &#xff08;一&#xff09;缺省参数 全缺省参数 半缺省参数 缺省参数只能在函数的声明中出现&#xff1a; 小结&#xff1a; &#xff08;二&#xff09;函数重载 函数重载的定义 三种重载 在上一篇中&#xff0c;我们从第一个Cpp程序为切入&#xff0c;讲解了Cpp的…

关于标准库中的 stack / queue / 优先级队列(涉及部分仿函数,deque)

目录 1.stack的介绍 2.queue的介绍 3.优先级队列&#xff08;堆&#xff09; 4.deque&#xff08;双端队列&#xff09; 1.stack的介绍 stack的文档介绍 翻译: 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器…

商业版SEO关键词按日计费系统:关键词排名优化、服务咨询、手机自适应+安装教程

源码介绍 系统安装(推荐安装宝塔) 添加站点时&#xff0c;搭建后&#xff0c;到宝塔网站列表点设置&#xff0c;网站目录&#xff0c;设置运行目录为 public 数据库配置 网站根目录下 .env 文件设置数据库信息 HOSTNAME 127.0.0.1 DATABASE 数据库名 USERNAME 数据库用户名…

Matlab论文插图绘制模板第132期—函数等高线填充图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线填充图。 先来看一下成品效果&#xff1a; 特…

【OAuth】快速入门

一、引言 1、什么是OAuth2.0&#xff1f; OAuth 2.0是一个关于授权的开放网络协议&#xff0c;允许用户授权第三方应用访问其在服务提供商上存储的资源&#xff08;如照片、视频、联系人列表&#xff09;&#xff0c;而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应…

HarmonyOs4.0基础(一)

目录 一、HarmonyOs系统定义 1.1系统的技术特性(三大特征) 1.1.1、硬件互助、资源共享 1.1.2、一次开发、多端部署(面向开发者) 1.1.3、统一OS&#xff0c;弹性部署(支持多种API&#xff1a;ArkTs、JS、C/C、Java) 1.2、系统的技术架构 二、Harmony OS项目搭建 2.1、(D…

Vue 封装echarts柱状图(Bar)组件

目的&#xff1a;减少重复代码&#xff0c;便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…

电脑技巧:推荐一款非常好用的万能预览工具

目录 一、软件简介 二、软件安装 三、支持的预览格式 四、使用说明 五、常用的快捷键 今天小编给大家推荐一款非常好用的万能预览工具&#xff0c;感兴趣的朋友可以下载试一试&#xff01; 一、软件简介 QuickLook&#xff0c;又叫文件查看万能工具&#xff0c;是一款高效…