数组排序 Array_Sorts

LeetCode 数组排序题

88. 合并两个有序数组

合并两个有序数组

难度简单

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中*,*使 nums1 成为一个有序数组。

说明:

  • 初始化 nums1nums2 的元素数量分别为 mn
  • 你可以假设 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. 部分排序

部分排序

难度中等

给定一个整数数组,编写一个函数,找出索引mn,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的mn(例如整个数组是有序的),请返回[-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 };
} }

参考资料

1、力扣LeetCode

2、恋上数据结构与算法3-面试题

【LeetCode】数组排序题 Array_Sorts的更多相关文章

  1. LeetCode算法题-Longest Word in Dictionary(Java实现)

    这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...

  2. LeetCode算法题-Kth Largest Element in a Stream(Java实现)

    这是悦乐书的第296次更新,第315篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第164题(顺位题号是703).设计一个类来查找流中第k个最大元素.请注意,它是排序顺序 ...

  3. LeetCode算法题-Set Mismatch(Java实现)

    这是悦乐书的第279次更新,第295篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第147题(顺位题号是645).集合S最初包含从1到n的数字. 但不幸的是,由于数据错误 ...

  4. LeetCode算法题-Maximum Product of Three Numbers(Java实现)

    这是悦乐书的第275次更新,第291篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第143题(顺位题号是628).给定一个整数数组,从其中找出三个数,使得乘积最大.例如: ...

  5. LeetCode算法题-Minimum Absolute Difference in BST(Java实现)

    这是悦乐书的第253次更新,第266篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第120题(顺位题号是530).给定具有非负值的二叉搜索树,找到任意两个节点的值之间的最 ...

  6. LeetCode算法题-Relative Ranks(Java实现)

    这是悦乐书的第248次更新,第261篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第115题(顺位题号是506).根据N名运动员的得分,找到他们的相对等级和得分最高的三个 ...

  7. LeetCode算法题-Assign Cookies(Java实现)

    这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...

  8. LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)

    这是悦乐书的第232次更新,第245篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448).给定一个整数数组,其中1≤a[i]≤n(n =数组的大小) ...

  9. LeetCode算法题-Third Maximum Number(Java实现-四种解法)

    这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...

随机推荐

  1. sqli-labs less-7(文件读写)

    less-7 dump into outfile(文件读写) 通俗的来讲,就是通过outfile传入一句话木马到网站目录里,然后用菜刀或者蚁剑等连接 过程: 输入id=?判断闭合类型 页面上提示了使用 ...

  2. Django之DRF-- API限速

    什么场景下需要限制访问频次呢? 1)防爬虫:爬虫可能会在短时间内大量的访问服务接口,增加服务器压力 2)对于需要限制访问频次的接口 具体使用配置如下: 1,settings.py加入配置 REST_F ...

  3. python菜鸟教程学习:数据结构

    列表方法 list.append(x):把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]. list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len( ...

  4. Python的环境是如何安装的,我来教你

    01 初见Python Python编程语言是荷兰人Guido van Rossum在1990年代开发出来的. Gudio拥数学和计算机双硕士学位,但他更喜欢计算机.当时Gudio觉得现有的编程语言无 ...

  5. 5.自定义view-评分控件RatingBar

    1.效果 2.实现原理 1.根据分数分别画选中的星星.正常的星星 2.onTouchEvent 中获取点击.滑动的位置,修改分数,在通过invalidate() 去重新绘制 核心代码: @Overri ...

  6. 2021年第一个flag

    2021年开始更新本文列出的系列文章,根据书籍和自己的理解整理出spring框架的相关的学习 Spring 的设计理念和整体架构 学习目标 Spring的各个子项目 Spring的设计目标 Sprin ...

  7. Oracle 使用MERGE INTO 语句 一条语句搞定新增编辑

    MERGE INTO RDP_CHARTS_SETTING T1 USING (SELECT '10001' AS PAGE_ID, 'test' AS CHART_OPTION FROM DUAL) ...

  8. C语言输入字符串

    首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的. 方法1  -- 通过"%s"输入 优点:简单明了,输入字符只要不大于数组长度都可以. #includ ...

  9. JVM 低延迟垃圾收集器 Shenandoah 和 ZGC

    本文部分摘自<深入理解 Java 虚拟机第三版> 概述 衡量垃圾收集器的三项指标分别是:内存占用.吞吐量和延迟.这三者共同构成一个"不可能三角",即一款优秀的收集器最多 ...

  10. 给2021年的我立几个FLAG

    看多了大牛的年终总结,我也懒得写了,反正写出来也没人看. 其实上面都是借口,我只是完全没有写年终总结的习惯. 为啥呢?因为这些年过的平平无奇,并没有什么特别出彩的事情. 如果有,嗯,2020年,我结婚 ...