leetcode刷题记录-1122.数组的相对排序[java,数组]

该博客介绍了LeetCode上的题目‘数组的相对排序’,内容包括题目要求及解决方案。作者首先提出问题背景,即给定两个数组arr1和arr2,需要对arr1进行排序,保持与arr2中元素的相对顺序,并将未在arr2中出现的元素按升序排列。作者分享了自己的Java解题思路,采用双指针方法先处理arr2中的元素,然后对剩余部分进行升序排序。同时,作者反思了自己在排序方法上的局限性,并提到Java中存在部分排序的内置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

给你两个数组,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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/relative-sort-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的代码

class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int pt = 0;
        for (int i=0; i<arr2.length; i++) {
            for (int j=pt; j<arr1.length; j++) {
                if (arr1[j] == arr2[i]) {
                    arr1[j] = arr1[pt];
                    arr1[pt] = arr2[i];
                    pt++;
                }
            }
        }
        //the part of arr1 that not in arr2, ascending
        for (int i=pt; i<arr1.length; i++){
            for (int j=i+1; j<arr1.length; j++) {
                if (arr1[i] > arr1[j]) {
                    int temp = arr1[i];
                    arr1[i] = arr1[j];
                    arr1[j] = temp;
                }
            }
        }
        return arr1;
    }
}

我的思路是先把arr2的部分处理好,再将剩余部分做一个升序排序。这里使用的是双指针的方法。
这里也暴露出基础知识不牢固的问题,也不排除是受到前半部分双指针的影响,第一时间里对于排序只有这一个思路。
后续也有去找一下java是否有部分排序的现成方法(因为python是有的,可以指定对数组的index1至index2进行排序)
发现确实是有的,Arrays.sort(arr,1,4)类似这样就可以。
上述代码的时空复杂度情况为
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值