【LeetCode】数组排序题 Array_Sorts
数组排序 Array_Sorts
LeetCode 数组排序题
88. 合并两个有序数组
合并两个有序数组
难度简单
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中*,*使 nums1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
通过次数141,733 提交次数298,842
_0088_合并两个有序数组.java
/**
* https://leetcode-cn.com/problems/merge-sorted-array/
* 合并两个有序数组
*/
public class _0088_合并两个有序数组 {
public void merge(int[] nums1, int m, int[] nums2, int n) {
// nums1 = [1,3,5,0,0,0], m = 3
// nums2 = [2,4,6], n = 3
int i1 = m - 1;
int i2 = n - 1;
int cur = nums1.length - 1;
while (i2 >= 0) {
if (i1 >= 0 && nums2[i2] < nums1[i1]) {
nums1[cur--] = nums1[i1--];
} else { // i1 < 0 || nums2[i2] >= nums1[i1]
nums1[cur--] = nums2[i2--];
}
}
}
}
75. 颜色分类
颜色分类
难度中等
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
进阶:
- 一个直观的解决方案是使用计数排序的两趟扫描算法。
首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 - 你能想出一个仅使用常数空间的一趟扫描算法吗?
通过次数77,390 提交次数141,177
_0075_颜色分类.java
/**
* https://leetcode-cn.com/problems/sort-colors/
* 颜色分类
*/
public class _0075_颜色分类 {
/*
* 一个只包含0、1、2的整型数组,要求对它进行【原地】排序
* 你能想出一个仅使用常数空间的一趟扫描算法吗?
* 0、1、2整型数组 原地排序 常数空间 一趟扫描算法
* 10大排序算法 借鉴下
* 空间复杂度O(1),时间复杂度O(n)
*/
public void sortColors(int[] nums) {
//0、1、2 左右
int i = 0;
int l = 0;
int r = nums.length - 1;
while (i <= r) {
if (nums[i] == 0) {
swap(nums, i++, l++);
} else if (nums[i] == 1) {
i++;
} else {
swap(nums, i, r--);
}
}
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
面试题 16.16. 部分排序
部分排序
难度中等
给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。
示例:
输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]
输出: [3,9]
提示:
0 <= len(array) <= 1000000
通过次数1,803
提交次数4,084
面试题_16_16_部分排序.java
/**
* https://leetcode-cn.com/problems/sub-sort-lcci/
*/
public class 面试题_16_16_部分排序 {
/*
* { 1, 5, 4, 3, 2, 6, 7 }
*/
public int[] subSort(int[] nums) {
if (nums.length == 0) return new int[] { -1, -1 };
// 从左扫描到右寻找逆序对(正序:逐渐变大)
int max = nums[0];
// 用来记录最右的那个逆序对位置
int r = -1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] >= max) {
max = nums[i];
} else {
r = i;
}
}
// 提前结束
if (r == -1) return new int[] { -1, -1 };
// 从右扫描到左寻找逆序对(正序:逐渐变小)
int min = nums[nums.length - 1];
// 用来记录最左的那个逆序对位置
int l = -1;
for (int i = nums.length - 2; i >= 0; i--) {
if (nums[i] <= min) {
min = nums[i];
} else {
l = i;
}
}
return new int[] { l, r };
}
}
参考资料
2、恋上数据结构与算法3-面试题
【LeetCode】数组排序题 Array_Sorts的更多相关文章
- LeetCode算法题-Longest Word in Dictionary(Java实现)
这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...
- LeetCode算法题-Kth Largest Element in a Stream(Java实现)
这是悦乐书的第296次更新,第315篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第164题(顺位题号是703).设计一个类来查找流中第k个最大元素.请注意,它是排序顺序 ...
- LeetCode算法题-Set Mismatch(Java实现)
这是悦乐书的第279次更新,第295篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第147题(顺位题号是645).集合S最初包含从1到n的数字. 但不幸的是,由于数据错误 ...
- LeetCode算法题-Maximum Product of Three Numbers(Java实现)
这是悦乐书的第275次更新,第291篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第143题(顺位题号是628).给定一个整数数组,从其中找出三个数,使得乘积最大.例如: ...
- LeetCode算法题-Minimum Absolute Difference in BST(Java实现)
这是悦乐书的第253次更新,第266篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第120题(顺位题号是530).给定具有非负值的二叉搜索树,找到任意两个节点的值之间的最 ...
- LeetCode算法题-Relative Ranks(Java实现)
这是悦乐书的第248次更新,第261篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第115题(顺位题号是506).根据N名运动员的得分,找到他们的相对等级和得分最高的三个 ...
- LeetCode算法题-Assign Cookies(Java实现)
这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...
- LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)
这是悦乐书的第232次更新,第245篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448).给定一个整数数组,其中1≤a[i]≤n(n =数组的大小) ...
- LeetCode算法题-Third Maximum Number(Java实现-四种解法)
这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...
随机推荐
- sql server添加单独新用户
- JavaScript:正则表达式匹配规则
正则表达式的语法规则: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- STL——容器(List)List 的构造函数
list<T> lstT -- list 对象的默认构造 list 与 vector 一样,同样采用模板类实现,对象的默认构造形式:list<T> lstT 如: 1 #in ...
- centos 7 配置 mysql 5.7 主从复制
centos 7 配置 mysql 5.7 主从复制 主库:192.168.12.3 从库:192.168.12.2 1. 主库从库所在服务器关闭防火墙Systemctl stop firewalld ...
- 自顶向下redis4.0(2)文件事件与客户端
redis4.0的文件事件与客户端 目录 redis4.0的文件事件与客户端 简介 正文 准备阶段 接受客户端连接 处理数据 返回数据结果 参考文献 简介 文件事件的流程大概如下: 在服务器初始化时生 ...
- js 乘除算法 浮点 精度解决办法
js中进行浮点数运算时容易出现精度问题 1) 除法函数 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(a ...
- ambari 修改kafka日志目录后,写入数据无法消费
## 起因:ambari 修改kafka日志目录后,写入数据无法消费 - 使用下面的客户端消费命令可以消费到数据 ./kafka-console-consumer.sh --zookeeper 192 ...
- svn 忘记了用户名和密码
[SVN]如果windows用户忘记了svn的用户名和密码怎么办? 如果windows用户忘记了svn的用户名和密码怎么办? 1>你得进入默认地址 C:\Users\Administrato ...
- ubuntu20.04 LTS 更换国内163源、阿里源、清华源、中科大源
Ubuntu 20.04 是 Ubuntu 的第 8 个 LTS 版本,其重大更新和改进将在 2030 年前终止,计划于2020年 4 月 23 日发布. 国内有很多Ubuntu的镜像源,有阿里的.网 ...
- Centos7__Scrapy + Scrapy_redis 用Docker 实现分布式爬虫
原理:其实就是用到redis的优点及特性,好处自己查--- 1,scrapy 分布式爬虫配置: settings.py BOT_NAME = 'first' SPIDER_MODULES = ['fi ...