首页 > 其他分享 >销售点分布调查

销售点分布调查

时间:2023-12-19 10:44:54浏览次数:20  
标签:queue 层级 int 调查 销售点 分布 node1 nodes 负责人

题目描述

终端部门按层级管理销售负责人,即:销售总裁直接对接公司分布在若干个国家的销售负责人,每个国家的销售负责人对接本国各大区负责人,大区负责人对接本区内各省负责人,各省负责人对接本省各市负责人等等…… 这里假设每个级别的负责人都仅向唯一的上级领导汇报。

假设共有N(N<100)位销售负责人,每人有一个两位数的代号(从 01 到 N),销售总裁的代号为01。如下样例给出了一个23人销售负责人的层级结构图:

给定销售负责人的层级关系数据,请统计指定负责人名下人数最多的层级是哪一层,该层有多少人?

  • 当有多个层级的人数相同时,选择最高的那个层级。
  • 所统计的层级是相对的,指定负责人的层级为 1,其下的层级逐层递增。
解答要求时间限制:1000ms, 内存限制:256MB 输入

第一行一个整数 N 表示销售负责人总数,取值范围:[1,100)。
第二行一个整数 M (0 <= M < N)表示有下属的负责人的人数。
随后 M 行,每行给出一位负责人,格式为ID K ID[1] ID[2] ... ID[K],其中 ID 是该负责人的代号,K (K > 0) 是其下属人数,后面给出的其下属们的代号。
最后一行给出待统计的指定负责人的代号ID

输出

两个数字,依次表示指定负责人名下人数最多的层级,及该层级的人数。

样例

输入样例 1 复制

23
13
21 1 23
01 4 03 02 04 05
03 3 06 07 08
06 2 12 13
13 1 21
08 2 15 16
02 2 09 10
11 2 19 20
17 1 22
05 1 11
07 1 14
09 1 17
10 1 18
01

输出样例 1

[4 9]
提示样例 1

01号负责人,其名下人数最多的层级是第4层(01号自身算第1层,其名下的层级逐层递增),该层有9人;因此输出[4 9]

补充说明:

  • 如果统计09号负责人:其名下所有层级的人数都是1人,取最高层级即自身层级 1,输出[1 1]。
  • 如果统计06号负责人:其名下第2层人数最多,有2人,输出[2 2]。
  • 如果统计20号负责人:其名下没有层级,取自身层级 1,人数 1,输出[1 1]。
    BFS模版:  
package main

import "fmt"

type TreeNode struct {
    val   int
    nodes []*TreeNode
}

func NewTreeNode(val int) *TreeNode {
    return &TreeNode{val: val}
}

func bfs(root *TreeNode) int {
    // 1.队列存当前节点,初春
    queue := make([]*TreeNode, 0)
    visited := make(map[*TreeNode]bool)

    queue = append(queue, root)
    // 2. 标记已访问过,标访
    visited[root] = true
    // root节点本身深度是1
    depth := 1

    // 3.循环队列非空,循空
    for len(queue) > 0 {
        size := len(queue)

        for i := 0; i < size; i++ {
            // 4.取出队首节点,然后移除队首
            cur := queue[0]
            queue = queue[1:]

            if cur.nodes == nil {
                fmt.Println(cur.val)
                return depth
            }
            // 5.遍历其所有邻居 遍邻
            for _, adj := range cur.nodes {
                // 6.若未访问过则标记并入队 入队
                if !visited[adj] {
                    queue = append(queue, adj)
                    visited[adj] = true
                }
            }
        }
        depth++
    }
    return depth
}

func main() {
    node1 := NewTreeNode(1)
    node2 := NewTreeNode(2)
    node3 := NewTreeNode(3)
    node4 := NewTreeNode(4)
    node5 := NewTreeNode(5)
    node6 := NewTreeNode(6)

    node1.nodes = append(node1.nodes, node2)
    node1.nodes = append(node1.nodes, node3)
    node2.nodes = append(node1.nodes, node4)
    node4.nodes = append(node1.nodes, node5)
    fmt.Printf("期望结果2, 实际 %d\n", bfs(node1))
    node3.nodes = append(node3.nodes, node6)
    fmt.Printf("期望结果3, 实际 %d\n", bfs(node1))
}



默写100篇

以下是一个简单的 bfs 口诀:

队列存当前节点,
标记已访问过,

循环队列非空,
取出队首节点,

遍历其所有邻居,
若未访问过则标记并入队。
View Code

 

AC:

 

 /*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 * Description: 上机编程认证
 * Note: 缺省代码仅供参考,可自行决定使用、修改或删除
 * 只能import Go标准库
 */
package main

import (
    "bufio"
    "errors"
    "fmt"
    "io"
    "os"
    "strconv"
    "strings"
)

// 待实现函数,在此函数中填入答题代码
func pointSaleSurvey(totalSales int, relationMap map[int][]int, appointSale int) []int {
    // 最终求什么 指定负责人下的最多人数层级 
    maxCount := 0
    maxDepth := 0
    queue := make([]int, 0) 
    queue = append(queue, appointSale)  
    depth := 0  
    for len(queue) > 0 {
        size := len(queue) 
        for i:=0; i<size; i++ {
            cur := queue[0]
            queue = queue[1:]
            for parent, relation := range relationMap {
                if cur == parent { 
                    queue = append(queue, relation...)
                }
            }
        }
        depth++   
        if maxCount < size {
            maxCount = size
            maxDepth = depth
        } 
    }  
    return []int{maxDepth, maxCount}
}

func main() {
    reader := bufio.NewReader(os.Stdin)
    totalSales, _ := readInputInt(reader)
    row, _ := readInputInt(reader)
    relationMap, err := readInputIntArrayFromNlines(reader, row)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    appointSale, _ := readInputInt(reader)
    result := pointSaleSurvey(totalSales, relationMap, appointSale)
    fmt.Print("[")
    for ind, val := range result {
        fmt.Print(val)
        if ind != len(result)-1 {
            fmt.Print(" ")
        }
    }
    fmt.Print("]")
}
func readInputInt(reader *bufio.Reader) (int, error) {
    var num int
    if _, err := fmt.Fscanf(reader, "%d\n", &num); err != nil {
        fmt.Println(err.Error())
        return 0, err
    }
    return num, nil
}

func readInputIntArrayFromNlines(reader *bufio.Reader, row int) (map[int][]int, error) {
    result := make(map[int][]int, 0)
    if row == 0 {
        return result, nil
    }
    for i := 0; i < row; i++ {
        lineBuf, err := reader.ReadString('\n')
        if err != nil && err != io.EOF {
            return nil, err
        }
        lineBuf = strings.TrimRight(lineBuf, "\r\n")
        lineBuf = strings.TrimSpace(lineBuf)
        ints := map2IntArray(lineBuf, " ")
        if len(ints)-2 != ints[1] {
            return result, errors.New("K len is error")
        }
        result[ints[0]] = ints[2:]
    }

    return result, nil
}

func map2IntArray(str string, dem string) []int {
    tempArray := strings.Split(str, dem)
    result := make([]int, len(tempArray))
    for index, value := range tempArray {
        value = strings.TrimSpace(value)
        intVal, _ := strconv.Atoi(value)
        result[index] = intVal
    }
    return result
}
View Code

 

  感受:
1.感觉用BFS状态还行 2.但BFS不够熟悉,最终求什么一定要清晰  

标签:queue,层级,int,调查,销售点,分布,node1,nodes,负责人
From: https://www.cnblogs.com/gongxianjin/p/17913143.html

相关文章

  • 分布式架构的演变过程
    1.单应用架构此时用户量很少,所有功能全部都在一个应用中,应用和数据库部署在一台机器上。2.应用服务器和数据库服务器分离随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台服务器,将数据库分离出去。3.应用服务器集群突然有一天......
  • 浅谈分布式事务
    事务:事务是指由一组操作组成的一个工作单元,这个工作单元具有原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。原子性:执行单元中的操作要么全部执行成功,要么全部失败。如果有一部分成功一部分失败那么成功的操作要全部回滚到执行前的状态。一致性:执行......
  • 测试开发 | 保护数据隐私的分布式学习方法:构建安全智能未来
    随着信息时代的不断发展,数据隐私的安全性成为科技领域亟待解决的问题之一。分布式学习作为一种保护数据隐私的先进方法,正在成为构建安全智能未来的关键一环。本文将探讨分布式学习方法如何在保护数据隐私的同时推动科技发展。1.数据隐私的挑战随着大数据时代的到来,个人隐私数据的......
  • zabbix分布式proxy
    1.为什么要学zabbix-proxyhttps://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring/proxies zabbix除了前面于超老师讲解的zabbix-server/zabbix-agent模式以外还支持proxy分布式的功能什么时候要用到?zabbixproxy使用场景:监控远程区......
  • 第三章 分布式配置中心
    1.简介为什么需要分布式配置中心分布式配置中心是为了解决在分布式系统中进行配置管理的需求而引入的。在传统的单体应用中,通常使用配置文件集中管理系统的配置信息。然而,在分布式系统中,由于系统规模变大、节点众多,并且可能部署在不同的服务器上,传统的配置文件方式会面临一些挑......
  • 使用分布式锁实现定时任务的精确调度
    使用分布式锁实现定时任务的精确调度在分布式系统中,实现定时任务的精确调度是一项具有挑战性的任务。由于分布式环境中存在多个节点,传统的定时任务可能会出现并发执行、重复执行或者错过执行的问题。为了解决这些问题,我们可以使用分布式锁来实现定时任务的精确调度。准备工作在......
  • MongoDB中的分布式集群架构
    MongoDB中的分布式集群架构前言ReplicaSet副本集模式副本集写和读的特性Sharding分片模式分片的优势MongoDB分片的组件分片键chunk是什么分片的算法哈希分片范围分片总结参考MongoDB中的分布式集群架构前言前面我们了解了MongoDB中的索引,......
  • Windows电脑上的多开工具与分布式计算的关系
    在Windows电脑上,多开工具和分布式计算之间存在着一定的关系。多开工具是一类软件,可以帮助用户在一台电脑上同时打开多个相同或不同的应用程序实例,从而提高工作效率。而分布式计算则是利用多台计算机的闲置资源来共同完成复杂的计算任务,通过将任务分发到各个计算节点上并将计算结果......
  • Redis分布式锁的扩展方法
     分布式锁代码#region秒杀业务测试privatestaticreadonlystringredisConnectionStr="127.0.0.1:6379,connectTimeout=5000,allowAdmin=false,defaultDatabase=1";///<summary>///秒杀业务///</summary>priv......
  • Kafka 分布式消息系统
    文章目录消息中间件对比Kafka概述kafka安装和配置kafka入门生产者发送消息消费者接收消息Kafka高可用设计集群备份机制(Replication)备份机制(Replication)-同步方式kafka生产者详解同步发送异步发送参数详解(ack)参数详解(retries)参数详解-消息压缩kafka消费者详解消费者组消息有......