golang力扣leetcode 937.重新排列日志文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: golang力扣leetcode 937.重新排列日志文件

937.重新排列日志文件

937.重新排列日志文件

题解

题目:简单题

1.如果字符串第二部分是数字,则排最终结果的最后
2.如果两个字符串第二部分都是数字,则保持相对稳定
3.如果字符串第二部分是字母,则字母排前面
3.如果两个字符串第二部分都是字母,则第二部分按字典序排
3.如果第二部分也相等,按第一部分字典序排

思路:内置排序写less,或者模拟。简单题没什么难度,主要是学到了新的函数

介绍:

sort.Slice()//相同元素时不保证稳定
sort.SliceStable()//相同元素时保证稳定
strings.SplitN(logs[i], " ", 2)//字符串最多被分为N份,这里是2
比如“a b c d e”------>["a","b c d e"]

代码

func reorderLogFiles(logs []string) []string {
  sort.SliceStable(logs, func(i, j int) bool {
    cnt1 := strings.SplitN(logs[i], " ", 2)
    a1, a2 := cnt1[0], cnt1[1]
    cnt2 := strings.SplitN(logs[j], " ", 2)
    b1, b2 := cnt2[0], cnt2[1]
    aIsDig, bIsDig := unicode.IsDigit(rune(a2[0])), unicode.IsDigit(rune(b2[0]))
    if aIsDig && bIsDig { //都是数字,则不交换,返回false
      return false
    }
    if !aIsDig && !bIsDig { //都是字母,按照题目要求来
      return a2 < b2 || a2 == b2 && a1 < b1
    }
    return !aIsDig //如果a是字母,则不用交换, 如果a是数字,需要交换
  })
  return logs
}
func reorderLogFiles(logs []string) []string {
  ans1 := make([]string, 0)
  ans2 := make([]string, 0)
  arr := make([]string, 0)
  mp := make(map[string][]string)
  for _, log := range logs {
    n := len(log) - 1
    if log[n] >= '0' && log[n] <= '9' {
      ans2 = append(ans2, log)
      continue
    }
    cnt := strings.SplitN(log, " ", 2)
    logFst, logSec := cnt[0], cnt[1]
    mp[logSec] = append(mp[logSec], logFst)
  }
  for k := range mp {
    arr = append(arr, k)
  }
  sort.Strings(arr)
  for _, v := range arr {
    vv := mp[v]
    sort.Strings(vv)
    for _, vvv := range vv {
      cnt := vvv + " " + v
      ans1 = append(ans1, cnt)
    }
  }
  return append(ans1, ans2...)
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
135 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
16天前
|
运维 监控 Cloud Native
一行代码都不改,Golang 应用链路指标日志全知道
本文将通过阿里云开源的 Golang Agent,帮助用户实现“一行代码都不改”就能获取到应用产生的各种观测数据,同时提升运维团队和研发团队的幸福感。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
27天前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
2月前
|
监控 Linux 应用服务中间件
系统监控:使用日志文件 journalctl的使用
本文介绍了如何使用`journalctl`命令来监控和查看Linux系统的日志文件,包括查看特定行数、过滤日志级别、实时跟踪日志、按时间段查询日志以及日志轮换和压缩的配置。
88 2
系统监控:使用日志文件 journalctl的使用
|
2月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
39 1
|
2月前
|
存储 监控 固态存储
如何监控和优化 WAL 日志文件的存储空间使用?
如何监控和优化 WAL 日志文件的存储空间使用?