题解 | #数据分类处理#

数据分类处理

https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

package main

import (
	"fmt"
	"strconv"
	"strings"
	"sort"
)

func getMatchIdx(n int, I []int) []int {
    var idxs []int
    ns := strconv.Itoa(n)
    
    for i, number := range I {
        rs := strconv.Itoa(number)
        if strings.Contains(rs, ns) {
            idxs = append(idxs, i)
        }
    }

    return idxs
}

func calculate(I []int, R []int) {
    var ans []int
    // 先对 R 进行排序和去重
    sort.Ints(R)
    set := make(map[int]struct{})
    var idx int
    for _, r := range R {
        if _, ok := set[r]; !ok {
            set[r] = struct{}{}
            R[idx] = r
            idx++
        }
    }
    R = R[:idx]

    // fmt.Printf("sorted R: %+v\n", R)

    // 对 R 中的每一个元素进行统计
    for _, r := range R {
        idxs := getMatchIdx(r, I)
        if len(idxs) == 0 {
            continue
        }

        ans = append(ans, r)
        ans = append(ans, len(idxs))
        for _, idx := range idxs {
            ans = append(ans, idx)
            ans = append(ans, I[idx])
        }
    }

    var s string
    s += fmt.Sprintf("%d ", len(ans))

    for _, num := range ans {
        s += fmt.Sprintf("%d ", num)
    }

    fmt.Println(s[:len(s)-1])
}

func main() {
    var m int
    fmt.Scan(&m)
    
    var I []int
    for i:=0; i<m; i++ {
        var num int
        fmt.Scan(&num)
        I = append(I, num)
    }

    var n int
    fmt.Scan(&n)
    
    var R []int
    for i:=0; i<n; i++ {
        var num int
        fmt.Scan(&num)
        R = append(R, num)
    }

    calculate(I, R)
}
// 本题输入为两行数字,中间用空格分开,所以采用:fmt.Scan(&num)

全部评论

相关推荐

10-20 15:26
门头沟学院 Java
桥头牛油火锅:这个比例不正常,简历的话项目经历放中间,项目功能分点可以再明确点,前面加“·”或者“1 2 3”,另外简历上的照片可以去外面摄影店拍一下,以后也会用到的,hr筛人也是多少会看的,毕竟世界是一个巨大的卡颜局嘛,还有有些hr由于消息太多可能没看到,后面可能会回来找你,要简历的还会多一点,我也是普2本,比例大致是600:90:15:3,当然我实力不太够,拿的offer比较少,慢慢来吧
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务