2022-03-27:class AreaResource {
String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州
String spliter; // 比如:逗号 -> ,
long count; // 表示地区的门店数量
}
现在需要把 List 进行转换,需要做到同级的地域能合并,
比如:area为中国,四川,成都 ,有10个门店;area为中国,浙江,杭州,有25个门店;area为中国,浙江,义乌,有22个门店,
最终生成的JSON字符串为: {“中国”:{“四川”:{“成都”:10]},“浙江”:{“义乌”:22,“杭州”:25}}}。
请实现下面的方法 public String mergeCount(List areas) 。
来自北京北明数科信息技术有限公司。

答案2022-03-27:

自然智慧。前缀树。

代码用golang编写。代码如下:

package main

import (
"fmt"
"strings"
) func main() {
a1 := NewAreaResource("中国,四川,成都", ",", 10)
a2 := NewAreaResource("中国,浙江,杭州", ",", 50)
a3 := NewAreaResource("中国,浙江,杭州", ",", 25)
a4 := NewAreaResource("中国,浙江,义乌", ",", 22)
a5 := NewAreaResource("中国,四川,成都", ",", 15)
a6 := NewAreaResource("中国,四川,攀枝花", ",", 12)
a7 := NewAreaResource("中国,浙江,宁波", ",", 16) areas := make([]*AreaResource, 0)
areas = append(areas, a1)
areas = append(areas, a2)
areas = append(areas, a3)
areas = append(areas, a4)
areas = append(areas, a5)
areas = append(areas, a6)
areas = append(areas, a7) ans := mergeCount(areas) fmt.Println(ans)
} type AreaResource struct {
area string
spliter string
count int
} func NewAreaResource(a string, s string, c int) *AreaResource {
ans := &AreaResource{}
ans.area = a
ans.spliter = s
ans.count = c
return ans
} // 要实现的方法
func mergeCount(areas []*AreaResource) string {
all := NewArea("", 0)
for _, r := range areas {
// 中国,四川,成都 , 10个门店
//path0 := r.area.split(r.spliter)
path0 := strings.Split(r.area, r.spliter)
// 中国 四川 成都
count := r.count
f(path0, 0, all, count)
}
return all.toString()
} // [中国,四川,成都]
// 0 1 2
func f(path0 []string, index int, pre *Area, count int) {
if index == len(path0) {
pre.count += count
} else {
// 前一个节点 pre 中国
// cur = 四川
cur := path0[index]
if _, ok := pre.next[cur]; !ok {
pre.next[cur] = NewArea(cur, 0)
}
f(path0, index+1, pre.next[cur], count)
}
} // 自己定义的!前缀树节点
type Area struct {
// 地区名称:中国
// 四川
// 成都
name string
// 中国 key : 省名 value: 下级节点
next map[string]*Area
count int
} func NewArea(n string, c int) *Area {
ans := &Area{}
ans.name = n
ans.count = c
ans.next = make(map[string]*Area)
return ans
} func (this *Area) toString() string {
ans := make([]byte, 0)
// : ""
// str = "中国":
// str = "成都":100
if this.name != "" {
ans = append(ans, []byte("\""+this.name+"\""+":")...)
}
if len(this.next) == 0 {
ans = append(ans, []byte(fmt.Sprint(this.count))...)
} else {
// "中国":{ 四川如何如何,河南如何如何,江苏如何如何}
//ans.append("{");
ans = append(ans, []byte("{")...)
for _, child := range this.next {
ans = append(ans, []byte(child.toString()+",")...)
}
ans[len(ans)-1] = '}'
}
return string(ans)
}

执行结果如下:


左神java代码

2022-03-27:class AreaResource { String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州 Str的更多相关文章

  1. 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】

    --------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...

  2. 2022.02.27 CF811E Vladik and Entertaining Flags

    2022.02.27 CF811E Vladik and Entertaining Flags https://www.luogu.com.cn/problem/CF811E Step 1 题意 在一 ...

  3. 2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集)

    2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集) https://www.luogu.com.cn/problem/CF811E Ste ...

  4. String、StringBuffer与StringBuilder之间区别[全屏看文]

    String.StringBuffer与StringBuilder之间区别[全屏看文]   最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...

  5. 2018/03/27 每日一个Linux命令 之 cron

    Cron 用于配置定时任务. -- 环境为 Ubuntu16-04 -- 先说说怎么配置一个简单的定时任务.直观的可以看到效果. 之前在网上查找资料,对Shell编程不熟悉的实在是很头疼,走了不少弯路 ...

  6. 网易2018.03.27算法岗,三道编程题100%样例AC题解

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. javascript总结27 :特殊引用类型String/Number/Boolean

    为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean 1  Number 例如: var s1 = "zhangsan&quo ...

  8. 2019.03.19 读书笔记 string与stringbuilder的性能

    1 string与stringbuilder 并不是stringbuilder任何时候都在性能上占优势,在少量(大约个位数)的字符串时,并不比普通string操作快. string慢的原因不是stri ...

  9. 2019.03.27 读书笔记 关于GC垃圾回收

    在介绍GC前,有必要对.net中CLR管理内存区域做简要介绍: 1. 堆栈:用于分配值类型实例.堆栈主要操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放.栈的执行效 ...

  10. 2016.03.27,英语,《Vocabulary Builder》Unit 06

    equ: from Latin aequus, meaning 'equal', equalize:使相等; equivalent:[ɪ'kwɪvələnt], A is equivalent to ...

随机推荐

  1. leetcode medium 记录 1-50

      # Title Solution 二刷 Difficulty 备注     2 Add Two Numbers      X   Medium     3 Longest Substring Wi ...

  2. (1)入门MasaFramework教程

    (1)入门MasaFramework教程 首先了解一下MasaFramework是什么 MasaFramework是一个基于.Net6.0的后端框架, 可以被用于开发Web应用程序.WPF项目.控制台 ...

  3. 局部异常因子(Local Outlier Factor, LOF)算法详解及实验

    局部异常因子(Local Outlier Factor, LOF)通过计算样本点的局部相对密度来衡量这个样本点的异常情况,可以算是一类无监督学习算法.下面首先对算法的进行介绍,然后进行实验. LOF算 ...

  4. 基于声网 Flat 构建白板插件应用“成语解谜”的最佳实践

    前言 本文作者赵杭天.他参加了"2022 RTE 编程挑战赛"--"赛道二 场景化白板插件应用开发" , 并凭借作品"成语解谜"获得了该赛道 ...

  5. 【单元测试】Junit 4(六)--junit4测试优先级顺序

    ​ @FixMethodOrder的顺序也并不一定是方法在代码中定义的顺序,这与JVM的实现有关. ​ 我们在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法,比如如在测试数据库相 ...

  6. 常用Linux发行版操作系统大盘点

    B站CodeSheep的教程 https://www.bilibili.com/read/cv6026694

  7. Sound Joy最新固件3.0.0.20版本 后悔了

    不建议更新3.0.0.20版本,更新之后音质直线下降,音质变得不耐听,低音浑浊,高音刺耳,三段不均衡.单纯听个响.更新此固件之后音质已经和100多的音响持平.对标JBL 万花筒6已经变得不可能.据我观 ...

  8. SQL优化---慢SQL优化

    于2023.3.17日重写,之前写的还是太八股文太烂了一点逻辑都没有,这次重新写了之后,感觉数据库优化还是很有必要的,之前觉得不必要是我年轻了. 一.如何定位慢SQL语句 1.通过慢查询日志查询已经执 ...

  9. nginx重启和操作

    在linux操作系统中,重启nginx 1.当不知道nginx所在目录时,需要先查找到nginx的位置  查看ngnix位置(master process 后面的就是 nginx的目录): ps -e ...

  10. 【ACM数论】和式变换技术,也许是最好的讲解之一

    在做数论题时,往往需要进行和式变换,然后变换成我们可以处理的和式,再针对和式做筛法.整除分块等操作. 本文将介绍一些常见的和式变换技术. 以下出现的概念大部分为个人总结,未必是学术界/竞赛界的统一说法 ...