我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

leetcode-1122数组的相对排序

发表于 2020-11-14 | 0 | 阅读次数 308

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

提示:

  • arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • arr2 中的元素 arr2[i] 各不相同
  • arr2 中的每个元素 arr2[i] 都出现在 arr1 中

思路:
刚开始时觉得就是只要把在arr2没出现的元素找出来,然后排序,添加到arr2这个切片后面就可以直接返回。然后报错了,发现arr1是会出现重复的元素,而这些元素是arr2的。然后得到提示是arr2[i]的每个元素都会是在arr1中,那么我就把arr1中的是arr2中的元素以一个map的方式全部计数存储。然后遍历arr2把arr1出现的多个相同元素的时候多append几次,就可以解决我的第一次尝试失败的问题了

解题:

import (
    "sort"
)
func relativeSortArray(arr1 []int, arr2 []int) []int {
    newArr1 := []int{}
    newMap := map[int]int{}
    for _, i := range arr1{
        flag := false
        for _,j := range arr2{
            if i == j{
                newMap[i] ++
                flag = true
                break
            }
        }
        if !flag{
            newArr1 = append(newArr1,i) 
        }
    }
    newArr2 := []int{}
    for _,i := range arr2{
        for j:= 0;j < newMap[i];j++{
            newArr2 = append(newArr2,i)
        }
    }
    sort.Ints(newArr1)
    return append(newArr2, newArr1...)
}
  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/l-e-e-t-c-o-d-e---1-1-2-2-shu-zu-de-xiang-dui-pai-xu
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
Git飞行规则(Flight Rules)
Kafka
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号