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

剑指Offer题目笔记21(计数排序)

面试题74:

面试题74

问题:

​ 输入一个区间的集合,将重叠的区间合并。

解决方案:

​ 先将所有区间按照起始位置排序,然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并,然后判断合并的区间是否和下一个区间重叠。重复这个过程,直到所有重叠区间都合并为止。

源代码:
class Solution {public int[][] merge(int[][] intervals) {//按照起始位置排序Arrays.sort(intervals,(i1,i2) -> i1[0] - i2[0]);List<int[]> list = new ArrayList<>();int i = 0;while(i < intervals.length){//前区间int[] temp = new int[]{intervals[i][0],intervals[i][1]};int j = i + 1;//判断是否存在后区间,存在则判断后区间起始位置是否小于或等于前区间的终止位置while(j < intervals.length && intervals[j][0] <= temp[1]){//重叠区间的终止位置由前区间和后区间的终止位置的最大值决定temp[1] = Math.max(intervals[j][1],temp[1]);j++;}list.add(temp);i = j;}int[][] result = new int[list.size()][];return list.toArray(result);}
}

面试题75:

面试题75

问题:

​ 输入两个数组arr1和arr2,将数组arr1中的数字按照数组arr2中的数字的相对顺序排序。如果数组arr1中的数字在arr2中没有出现,那么将这些数字按递归的顺序排在后面。

解决方案:

​ 使用计数排序。先统计arr1中的每个整数在数组中出现的次数记为counts,然后按照arr2的顺序将每个整数按照它出现的次数填入到数组中,扫描完arr2数组后,继续扫描counts数组,如果counts数组中出现整数出现次数不为0时,将每个整数按照它出现的次数填入到arr2数组中。

源代码:
class Solution {public int[] relativeSortArray(int[] arr1, int[] arr2) {int[] counts = new int[1001];for(int num:arr1){counts[num]++;}int i = 0;//扫描arr2数组for(int num:arr2){while(counts[num] > 0){arr1[i++] = num;counts[num]--;}}//扫描counts数组for(int num = 0;num < counts.length;num++){while(counts[num] > 0){arr1[i++] = num;counts[num]--;}}return arr1;}
}

相关文章:

  • 【Win】使用PowerShell和Webhooks轻松发送消息至Microsoft Teams
  • 【Java常用的API】JDK8相关时间类
  • linux离线安装maven
  • P1629 邮递员送信
  • 蓝桥杯 本质上升序列
  • 2024批量下载微博内容点赞转发评论数等数据,词云分析微博数据
  • 【动手学深度学习-pytorch】9.2长短期记忆网络(LSTM)
  • K8S的mountPath和subPath
  • LeetCode 206.反转链表
  • 如何在智能交通系统中使用物联网技术提高道路安全和效率
  • 怎么让ChatGPT批量写作原创文章
  • Springboot+MybatisPlus+EasyExcel实现文件导入数据
  • Mysql中的那些锁
  • 【跟着CHATGPT学习硬件外设 | 04】ADC
  • SVG XML 格式定义图形入门介绍
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • bearychat的java client
  • CSS盒模型深入
  • Linux后台研发超实用命令总结
  • Markdown 语法简单说明
  • mongo索引构建
  • Node 版本管理
  • tweak 支持第三方库
  • vue2.0项目引入element-ui
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 编写高质量JavaScript代码之并发
  • 给github项目添加CI badge
  • 基于web的全景—— Pannellum小试
  • 简单基于spring的redis配置(单机和集群模式)
  • 深入浅出Node.js
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一份游戏开发学习路线
  • 与 ConTeXt MkIV 官方文档的接驳
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​ArcGIS Pro 如何批量删除字段
  • ​力扣解法汇总946-验证栈序列
  • ​人工智能书单(数学基础篇)
  • # Java NIO(一)FileChannel
  • #Ubuntu(修改root信息)
  • #在 README.md 中生成项目目录结构
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)ABI是什么
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .java 9 找不到符号_java找不到符号
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复