go语言题解LeetCode1122数组的相对排序

 更新时间:2022年12月29日 08:39:30   作者:刘09k11  
这篇文章主要为大家介绍了go语言题解LeetCode1122数组的相对排序,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目描述

1122. 数组的相对排序 - 力扣(LeetCode)

给你两个数组,arr1 和 arr2arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。

arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例 1:

输入: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]

示例  2:

输入:arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
输出:[22,28,8,6,17,44]

提示:

1 <= arr1.length, arr2.length <= 1000

0 <= arr1[i], arr2[i] <= 1000

arr2 中的元素 arr2[i]  各不相同 

arr2 中的每个元素 arr2[i] 都出现在 arr1 中

思路分析

最简单的就是 暴力法 了

解题思路

利用双循环将数组1的数字依次与数组二相比较,相同则与前面元素交换位置
数组1中剩余元素利用sort函数进行排序即可

vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
        int tmp = 0;
        for(int i = 0;i<arr2.size();++i)
           for(int j = 0;j<arr1.size();++j){
               if(arr1[j] == arr2[i]){
                     swap(arr1[j],arr1[tmp]);
                     ++tmp;
               }
           }
           sort(arr1.begin()+tmp,arr1.end());
           return arr1;
    }

还有就是 计数排序

解题思路

与递增递减排序不同,本题是根据数组顺序自定义排序,因此最适合计数排序来实现(桶排序)

因为题意说明数组中元素在0~1000之间,因此定义一个容量为1000的桶

第一个循环对数组1中的元素进行计数,结果保存在桶中

第二个循环通过数组2,将重合的元素从数组1的0位置开始插入

第三个循环,搜索桶中剩余的数组1元素,并把它们插入到数组1的后面。

vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) 
{
	vector<int> count(1001);
	for (int i = 0; i<arr1.size(); i++)
	{
		count[arr1[i]]++;
	}
	int k = 0;
	for (int i = 0; i<arr2.size(); i++)
	{
		while (count[arr2[i]]>0)
		{
			arr1[k++] = arr2[i];
			count[arr2[i]]--;
		}
	}
	for (int i = 0; i < count.size(); i++)
	{
		while (count[i] >0)
		{
			arr1[k++] = i;
			count[i]--;
		}
	}
	return arr1;
}

以上就是go语言题解LeetCode1122数组的相对排序的详细内容,更多关于go语言数组相对排序的资料请关注脚本之家其它相关文章!

相关文章

  • 破解IDEA(Goland)注册码设置 license server一直有效不过期的过程详解

    破解IDEA(Goland)注册码设置 license server一直有效不过期的过程详解

    这篇文章主要介绍了破解IDEA(Goland)注册码设置 license server一直有效不过期,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 轻松读懂Golang中的数组和切片

    轻松读懂Golang中的数组和切片

    这篇文章主要给大家介绍了关于Golang中数组和切片的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者Golang具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Go语言中strings和strconv包示例代码详解

    Go语言中strings和strconv包示例代码详解

    这篇文章主要介绍了Go语言中strings和strconv包示例代码详解 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • Golang使用channel实现一个优雅退出功能

    Golang使用channel实现一个优雅退出功能

    最近补 Golang channel 方面八股的时候发现用 channel 实现一个优雅退出功能好像不是很难,之前写的 HTTP 框架刚好也不支持优雅退出功能,于是就参考了 Hertz 优雅退出方面的代码,为我的 PIANO 补足了这个 feature
    2023-03-03
  • go-zero过载保护源码解读

    go-zero过载保护源码解读

    这篇文章主要为大家介绍了go-zero过载保护源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 使用GO实现Paxos共识算法的方法

    使用GO实现Paxos共识算法的方法

    这篇文章主要介绍了使用GO实现Paxos共识算法,本文给大家介绍的非常详细,对大家的学习或工作,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 简单聊聊Go语言的注释

    简单聊聊Go语言的注释

    这篇文章主要介绍了简单聊聊Go语言的注释的相关资料,需要的朋友可以参考下
    2023-08-08
  • 使用go语言实现cors中间件

    使用go语言实现cors中间件

    CORS是一种浏览器安全机制,用于控制在Web应用程序中不同源(Origin)之间的资源共享,本文将给大家介绍如何使用go语言实现cors中间件,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-09-09
  • Go结合MQTT实现通信的示例代码

    Go结合MQTT实现通信的示例代码

    本文主要介绍了Go结合MQTT实现通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Golang中间件设计示例详解

    Golang中间件设计示例详解

    这篇文章主要介绍了Golang中间件设计示例,中间件是在HTTP请求处理过程中,对请求进行处理的一种模式,中间件可以在请求到达处理器之前或之后对请求进行拦截,修改或者增强,同时可以对响应进行处理,需要的朋友可以参考下
    2023-05-05

最新评论