两个数组找相同元素_leetcode数组--sort排序题目汇总

2023-11-11

概要:此类题目的特点是会遇到一些杂乱无序的数组,经过排序后,会更好处理。

1051. 高度检查器

学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。

请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。

注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。

输入:heights = [1,1,4,2,1,3]

输出:3

解释:

当前数组:[1,1,4,2,1,3]

目标数组:[1,1,1,2,3,4]

在下标 2 处(从 0 开始计数)出现 4 vs 1 ,所以我们必须移动这名学生。

在下标 4 处(从 0 开始计数)出现 1 vs 3 ,所以我们必须移动这名学生。

在下标 5 处(从 0 开始计数)出现 3 vs 4 ,所以我们必须移动这名学生。

#思路:先建立一个正确的顺序,然后逐个对比检查原数组

class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        z=0
        for k,v in enumerate(sorted(heights)):
            if v!=heights[k]:
                z+=1
        return z

977. 有序数组的平方

给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]

思路:创建一个新的数组存放平方后的元素,然后排序

class Solution:
    def sortedSquares(self, A: List[int]) -> List[int]:
        ans=[]
        for i in A:
            ans.append(i**2)   
        return sorted(ans)

561. 数组拆分 I

给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。

输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).

思路:

(1)对于每一组里的两个元素,小的元素会被舍弃(不加入最终的求和运算)

(2)要使Sum((a0,b0),(a1,b1)......)最大,则被舍弃的元素应该尽可能小

(3)第一组(全数组最小值,全数组次小值),第二组(全数组第三小,第四小)...

(4)升序排序,然后求和即可

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        ans=sum(nums[::2])
        return ans

1122. 数组的相对排序---上海国音智能面试题类似

给你两个数组,arr1 和 arr2:arr2 中的元素各不相同;arr2 中的每个元素都出现在 arr1 中

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

思路:

  1. 依次循环遍历arr2中的元素
  2. 依次从arr1中删除arr2中的元素
  3. 最后的元素用sorted排序,在组合新数组
class Solution(object):
    def relativeSortArray(self, arr1, arr2):
        res = []
        for i in arr2:
            while i in arr1:    #这里的while仔细品
                res.append(i)
                arr1.remove(i)   #list.remove(object) 用于移除列表中某个值的第一个匹配项
        return res + sorted(arr1)

1200. 最小绝对差 ---光之树科技面试题类似

给你个整数数组 arr,其中每个元素都 不相同。请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。

输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]

思路:如果A,B,C是一个排序后的数组,则排序后,C-A一定是大于B-A和C-B的

class Solution:
    def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
        if not arr:
            return []
        #列表排序
        arr.sort()
        res=[]
        #tmp:当前最小差值
        tmp=arr[1]-arr[0]
        for i in range(1,len(arr)):
            #出现更小差值后,更新结果
            if arr[i]-arr[i-1]<tmp:
                tmp=arr[i]-arr[i-1]
                res=[[arr[i-1],arr[i]]]   #括号易出错,子数组也要升序排
            #加入相同差值的数组
            elif arr[i]-arr[i-1]==tmp:
                res.append([arr[i-1],arr[i]])
            else:
                continue
        return res

leetcode1086: 前五科的均分

给你一个不同学生的分数列表,请按照学生的id顺序返回每个学生最高的五科成绩的平均分。对于每条item[i],item[i][0]为学生id, item[i][1]为学生的分数,平均分请采用整数除法计算。

input: [[1,91],[1,92],[2,93]...........]
output: [[1,87],[2,88]]

思路:

  • 信息重点,每个学生可能不止五科,但算平均分时要计算最高的五科。
  • 先用集合set找出来有多少个学生,将其id保存为id_list
  • 然后按照学生的id去遍历item,找出每个学生的所有成绩。
  • 排序每个学生的成绩,然后取最高的五门计算平均分
  • 将结果保存进一个新的列表里
def highFive(self,items):
	id_list=list(set([i for i,j in items]))
	res=[]
	for id_1 in id_list:
		score_arr=[]
		for ids,scores in items:
			if ids==id_1:
				score_arr.append(scores)
		sums=sum(sorted(score_arr[:5]))
		res.append[id_1,int(sums/5)]
	return res

581. 最短无序连续子数组

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

你找到的子数组应是最短的,请输出它的长度。

输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

思路:

  • 先对数组nums进行排序
  • 利用两个指针,从首尾遍历,寻找排序前和排序后不一样的元素,其索引即为要找的最短子数组
class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        sorted_nums=sorted(nums)
        p1,p2=0,len(nums)-1
        while p1<=p2 and nums[p1]==sorted_nums[p1]:
            p1+=1
        while p1<=p2 and nums[p2]==sorted_nums[p2]:
            p2-=1
        return p2-p1+1

268. 缺失数字

给定一个包含0, 1, 2, ..., nn 个数的序列,找出 0 ..n 中没有出现在序列中的那个数。

输入: [3,0,1]
输出: 2

思路:

  • 先考虑特殊情况:首位不是0,那么缺少0,末尾不是n,那么缺少n
  • else: 整个数组应该遵循 nums[i-1]+1=nums[i],如果nums[i-1]+1!=nums[i],那么缺少的就是nums[i-1]+1
class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        nums.sort()
        if nums[-1]!=len(nums):
            return len(nums)
        elif nums[0]!=0: 
            return 0
        for i in range(1,len(nums)):   #从1开始检查,把0作为nums[i-1]+1的起点
            expected_num=nums[i-1]+1
            if nums[i]!=expected_num:
                return expected_num

455. 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

输入: [1,2,3], [1,1]

输出: 1

解释: 
你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。
虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。
所以你应该输出1。

输入: [1,2], [1,2,3]

输出: 2

解释: 
你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
你拥有的饼干数量和尺寸都足以让所有孩子满足。
所以你应该输出2.

思路:

  • 贪心算法,优先满足胃口小的
  • 先对胃口g,饼干尺寸s进行升序排序
  • 让两个指针分别指向g和s的初始位置
  • if 胃口g[i]<=饼干s[j],则这块饼干j可以分给孩子i,指针i,j各移动一下,结果计数+1
  • else: 无法满足胃口,将j+1,看一块更大的饼干是否满足孩子i的胃口。
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        res,g_len,s_len=0,len(g),len(s)
        s.sort()
        g.sort()
        i,j=0,0
        while i<g_len and j<s_len :
            if g[i]<=s[j]:
                res+=1
                i+=1
                j+=1
            else:
                j+=1
        return res

628. 三个数的最大乘积

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

输入: [1,2,3]
输出: 6

输入: [1,2,3,4]
输出: 24
注意:

给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

思路: 最大三个数的两种情形

  • 两个负数一个正数
  • 三个正数
  • 先对数组排序,要么排序后末尾三个为正数,要么前面两负一正,只有这两种可能
class Solution:
    def maximumProduct(self,nums):
        nums.sort()
        v1=nums[-1]*nums[-2]*nums[-3]
        v2=nums[0]*nums[1]*nums[-1]
        return max(v1,v2)

976. 三角形的最大周长

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回 0

输入:[2,1,2]
输出:5

输入:[1,2,1]
输出:0

输入:[3,2,3,4]
输出:10

思路:三角形充分必要条件:a+b>c,假设已经知道c的长度了,只需要尽可能选大的a和b

class Solution:
    def largestPerimeter(self, A: List[int]) -> int:
        A.sort()
        for i in range(len(A)-3,-1,-1):
            if A[i]+A[i+1]>A[i+2]:
                return A[i]+A[i+1]+A[i+2]
        return 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个数组找相同元素_leetcode数组--sort排序题目汇总 的相关文章

  • 跳槽被问离职原因怎样回答能显出高情商?

    对于员工跳槽 原因很简单 要么是收入不高 要么是得到不公平待遇 心里委屈 这真是直击离职者内心 但是 当我们重新找工作 准备跳槽的时候 面试官很可能就会问你 你离职的原因是什么 跳槽被问离职原因怎样回答能显出高情商 广西事业单位招聘整理了如
  • 【C++】Boost库简介

    参考 https blog csdn net f110300641 article details 81865545 https www boost org doc libs 1 80 0 more getting started wind
  • 【100%通过率 】【华为OD机试c++/python】天然蓄水库【 2023 Q1考试题 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 公元2919年 人类终于发现了一颗宜居星球 X星 现想在X星一片连绵起伏的山脉间建一个天然蓄水库 如何选取水库边界 使蓄水量最大 要求 山脉用正
  • puppet—批量部署mysql5.7+httpd[包含启动]

    httpd install pp class httpd install package httpd name gt httpd ensure gt installed httpd service pp class httpd servic
  • 基于ARM的温度采集系统设计

    摘要 本设计是基于嵌入式技术作为主处理器的温度采集系统 利用S3C44B0x ARM微处理器作为主控CPU 辅以单独的数据采集模块采集数据 实现了智能化的温度数据采集 传输 处理与显示等功能 并讨论了如何提高系统的速度 可靠性和可扩展性 并
  • 关于app退出的问题,完美退出方式

    实际开发中会有很多关于app的退出问题 我个人比较常见的有两种 一 双击退出 比如说我们在首页的时候需要一个双击退出的方法 点击第一次手机的返回键时提示 再点一次退出应用 之类的话语 我们可以这样做 对重写onKeyDown方法 当他第一次
  • Zookeeper中Session Timeout的那些事

    前言 RDS系统致力于MySQL数据的高可用 高可靠 高性能以及在线扩展功能 实现这些特性的主要逻辑功能都运行在管理服务器上 一旦管理服务器宕机 数据库的在线扩展功能 备份功能 故障恢复功能等都无从谈起 然而 之前RDS系统管理服务器却是单
  • 服务器读取缓存文件,同一个服务器,chrome可以从缓存读取静态文件,firefox不行...

    服务器是nginx的 配置了下面这段代码 location css js apk root usr local resources expires 12h 用chrome访问可以看到js与css都是 from memory cache 与
  • webpack打包vue反编译_前端性能优化——webpack篇

    相信每个用过webpack的同学都对 打包 和 压缩 这样的事情烂熟于心 这些老生常谈的特性 我更推荐大家去阅读文档 本文将把注意力放在webpack的性能优化上 一 提高构建速度 1 给 loader 减轻负担 用 include 或 e
  • 智能电子界桩自然保护区远程监控解决方案

    一 方案背景 自然保护地是生态建设的核心载体 中华民族的宝贵财富 美丽中国的重要象征 在维护国家生态安全中居于重要地位 经过多年的努力 我国已建立数量众多 类型丰富 功能多样的各级各类自然保护地 在保护生物多样性 保存自然遗产 改善生态环境
  • ajax从服务器读数据,本地网页不刷新

    function ajax url fnSucc fnFild 1 创建对象 var oAjax null if window XMLHttpRequest oAjax new XMLHttpRequest else oAjax new A
  • SQL——DML语句

    DML Data Manipulation Language 一 数据的插入 语法 单行插入 INSERT INTO 表名 字段名1 字段名2 values 值1 值2 多行插入 INSERT INTO 表名 字段名1 字段名2 value
  • 数据库之--count/distinct/group by的用法总结

    一 count distinct group by的用法 1 count 函数是用来统计表中记录的一个函数 返回匹配条件的行数 不去重 2 count 语法 1 count 包括所有列 返回表中的记录数 相当于统计表的行数 在统计结果的时候
  • 已解决cython_bbox安装出现的问题

    为了跑FairMOT代码 配置环境时遇到了该问题 我已经安装了cython 然后下载了压缩包 解压后打开cython bbox 0 1 3文件夹 打开文件setup py 将extra compile args Wno cpp 修改为ext
  • python-sqlalchemy中设置autocommit

    这个只需要在连接数据库的时候加上即可 SQLALCHEMY DATABASE URI mysql pymysql username passwrod ip prot database charset utf8 autocommit true
  • Linux查看日志命令,压缩日志不解压直接查看

    日常工作中经常要在linux服务器上查看日志定位问题 本文简单总结下常用查看日志的命令 监控日志命令 tail f file log tailf file log 上一个命令的快捷键 但是有些系统默认没有 查看日志命令 这个命令其实也可以查
  • 数学建模 优质的信息检索渠道和工具

    文章目录 一 前言 二 主要内容 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 优质的信息检索渠道和工具对数学建模比赛获奖有着重要的影响 以下是从理论上分析这一影响的几个主要方面 知识获取
  • vs 2019输出中文乱码解决

    参考 http t csdn cn YDG6B
  • 股市中的内盘、外盘、跌幅、震幅、现手、总手、换手是什么意思?

    外盘即买盘 内盘即卖盘 内盘即卖盘要卖掉 有人买就以这个成交价设为买入价 外盘即买盘要买进 有人卖就以这个成交价设为卖出价 总手就是成交量 1个交易日的买卖总量 即等于外盘 内盘 成交量 总手 量比 在查看分时走势图时候 可根据右键菜单选择

随机推荐

  • hadoop3.0.3搭建与入门(添加删除;调度-节点)

    hadoop版本 apache cloudera CDH版 Hortonworks HDP版 国内对CDH用的多 一般用3 0 单机版 scp hadoop 3 0 3 tar gz jdk 8u181 linux x64 tar gz s
  • 递归算法(二分查找)

    递归也算循环的一种 递归 你打开面前这扇门 看到屋里面还有一扇门 你走过去 发现手中的钥匙还可以打开它 你推开门 发现里面还有一扇门 你继续打开它 若干次之后 你打开面前的门后 发现只有一间屋子 没有门了 然后 你开始原路返回 每走回一间屋
  • RNN循环神经网络的Matlab模拟和训练

    RNN循环神经网络的Matlab模拟和训练 循环神经网络 RNN 是一种适用于序列数据的神经网络 RNN 在处理时间序列数据方面非常适用 如自然语言处理 股票价格预测等 本文将介绍如何使用 Matlab 来进行 RNN 的模拟和训练 在 M
  • 大O表示法及旅行者问题

    算法的运行时间 运行时间增速 不同算法随规模的增大而增大的速度不同 我们需要比较不同算法的运行时间的增速 大O表示法 类比数据结构中的时间复杂度 比较操作数 其体现了算法运行时间的增速 这种表示法体现了算法在最糟情况下的运行时间 这不就是时
  • 全新升级!讯飞星火认知大模型V2.0,你准备好了吗?

    前言 AI大模型正在全球掀起新一轮的技术革命与商业浪潮 从技术突破到应用落地 加速改变着我们的生活与产业 依托通用人工智能领域的持续深耕和系统性创新 科大讯飞于5月6日正式发布星火认知大模型 并于6月9日迅速完成迭代升级 受到用户持续好评
  • 软件测试环境的搭建

    前言 测试环境是QA开展测试工作的前置条件 稳定和可控的测试环境 可以使测试人员在执行测试用例时无需花费额外的时间去维护 有些公司运维或者研发部门会帮忙准备好测试环境 但是QA如果一味依赖其他部门 会局限测试工作的开展 一 什么是测试环境
  • 【PASS】析因设计样本量计算

    b站视频 working
  • 软件设计和硬件开发 部分学习网站

    1 单片机教程网 http www 51hei com 2 博客园 https www cnblogs com 3 各种程序语言基础知识 https www runoob com cprogramming c scope rules htm
  • Linux运维基础--常见命令

    Linux运维基础 常见命令 linux的发行版本介绍 Linux 内核 kernel 版本主要有 4 个系列 分别为 Linux kernel 2 2 Linux kernel 2 4 Linux kernel 2 6 Linux ker
  • 贪心——字典序最小问题

    https vjudge net problem POJ 3617 题目简单理解就是 给定长度为N的字符串为S 要构造一个长度为N的字符串T 起初 T 是一个空串 随后反复进行下列任意操作 从S的头部删除一个字符串 加到T的尾部 从S的尾部
  • 教与学(TlBO)算法路径规划应用

    是一种基于群体的启发式优化算法 不需要任何算法特定参数 这种方法模拟了传统的课堂教学过程 整个优化过程包括教师阶段和学习者阶段 在教师阶段 每个学生都向最优秀的个体进行学习 在学习阶段 每个学生都以随机的方式向其他学生学习
  • k8s--基础--23.3--认证-授权-准入控制--授权

    k8s 基础 23 3 认证 授权 准入控制 授权 1 介绍 Kubernetes的授权是基于插件形式的 其常用的授权插件有以下几种 1 Node 节点认证 2 ABAC 基于属性的访问控制 3 RBAC 基于角色的访问控制 4 Webho
  • 在IDEA中用jdbc技术通过配置文件连接mysql数据库连接池

    File gt project Structure gt Libraries gt 点 号 gt java gt 选择在电脑中下载druid 1 1 9 jar及以上版本的德鲁伊jar包和mysql connector java 8 0 0
  • MySQL-锁详解

    锁 锁是计算机协调多个进程或线程并发访问某一资源的机制 在数据库中 除传统的计算资源 如CPU RAM I O等 的争用以外 数据也是一种供许多用户共享的资源 如何保证数据并发访问的一致性 有效性是所有数据库必须解决的一个问题 锁冲突也是影
  • 算法刷题-双指针-反转链表

    反转链表的写法很简单 一些同学甚至可以背下来但过一阵就忘了该咋写 主要是因为没有理解真正的反转过程 206 反转链表 力扣题目链接 题意 反转一个单链表 示例 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 5 gt
  • fork() 函数

    请问下面的程序一共输出多少个 int main void int i for i 0 i lt 2 i fork printf return 0 答案 8 解析 参考文章 https coolshell cn articles 7965 h
  • Ubuntu 18.04 安装Tensorflow遇到的问题

    问题一 Tensorflow安装完成后测试时 出现libcublas so 9 0找不到问题 ImportError libcublas so 9 0 cannot open shared object file No such file
  • uni-app 数据上拉加载更多功能

    实现上拉加载更多 打开项目根目录中的 pages json 配置文件 为 subPackages 分包中的商品 goods list 页面配置上拉触底的距离 subPackages root subpkg pages path goods
  • 线程的同步和互斥

    线程的同步和互斥题目 题目 设计生产者与消费者模型 缓冲区是一个大小为10的环 每个生产者产生一个0 1000的随机整数 存放在环空位中 消费者从环中取数据 并输出 一个生产者或消费者对应一个线程 要避免 1 两个生产者同时向环的同一个位置
  • 两个数组找相同元素_leetcode数组--sort排序题目汇总

    概要 此类题目的特点是会遇到一些杂乱无序的数组 经过排序后 会更好处理 1051 高度检查器 学校在拍年度纪念照时 一般要求学生按照 非递减 的高度顺序排列 请你返回能让所有学生以 非递减 高度排列的最小必要移动人数 注意 当一组学生被选中