【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).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...
随机推荐
- vs2015常用快捷键大全
1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键"Ctrl + -"; 2)前进到下一个光标位置:"Ctrl + Shift + - &q ...
- Azure应用服务+Github实现持续部署
上次我们介绍了如何使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序).我们通过Visual studio新建一个项目后手动编译发布代码.然后通过F ...
- 一、安装LoadRunner12
今天接到任务最近要进行性能测试(刚开始搞自动化,有要搞性能测试,领导嫌我不忙吧),之前做接口测试用过Jmeter,也可以使用Jmeter做性能测试,但公司要求用LoadRunner,开始学习性能测试和 ...
- centos7 安装netstat命令工具
[root@node01 yum.repos.d]# yum install -y net-tools Loaded plugins: fastestmirror Loading mirror spe ...
- securecrt7.1注册方法
本文出自 "Kinslayer 's Blog" 博客,请务必保留此出处http://kinslayer.blog.51cto.com/3681810/833438
- rbd锁引起kvm虚拟机无法启动的故障
前言 环境因为一些问题(网络,或者磁盘,或者其它各种异常),引起了集群的状态的一些变化,变化之后,集群的某些虚拟机正常某些虚拟机出现异常,异常现象就是无法启动 特别是win server2008 ,会 ...
- Numpy的学习1-创建数据基础
1 import numpy as np 2 3 array = np.array([[1,2,3],[4,5,6]]) 4 5 print(array) 6 print('number of dim ...
- SQL学习(三) 复杂查询
我们本节考察的数据库如下所示: 3.1 创建出满足下述三个条件的视图(视图名称为 ViewPractice5_1).使用 product(商品)表作为参照表,假设表中包含初始状态的 8 行数据. 条件 ...
- 跟我一起学Redis之高可用从主从复制开始
前言 现在遇到高并发场景时,缓存技术应该算是性能优化的第一步,缓解数据库压力的同时还能提高访问效率,而Redis应该是绝大多数应用场景的首选.但是尽快Redis性能再优秀,在当今高并发场景下,一台服务 ...
- Python处理邮件内容和提取邮件里的url地址
最近在搞一个邮箱验证账号注册和登录的模块.总结一下.就当记载.文章中涉及到域名和邮箱等都经过处理. 需求是这样子的,注册某个网站的账号,然后注册需要邮件内容激活,登录的时候如果不是常用设备的话也需要认 ...