leetcode连接
https://leetcode.cn/problems/validate-ip-address/description/
题目描述
解题思路
如果一个字符串是ipv4 则必须包含 . , 如果一个字符串是ipv6则必须包含 :, 因此可以将题目转换为判断是一个字符串是ipv4,以及判断一个字符串是ipv6两个部分。
判断一个字符串是否是16进制可以使用如下方法进行判断,如果err为nil则标识这个字符串是一个正确的16进制,否则不是16进制
_,err := strconv.ParseInt(ip,16,64)
判断一个字符串是否是十进制可以使用如下方式判断,如果err为nil则标识这个字符串是一个正确的十进制。
i,err := strconv.Atoi(ip)
题目描述
买下所有产品的客户
func validIPAddress(queryIP string) string {
if strings.Index(queryIP,".") >0 {
// 验证是否是ipv4
if isIpv4(queryIP){
return "IPv4"
}
return "Neither"
}
if strings.Index(queryIP,":") > 0 {
// 验证是否是ipv6
if isIpv6(queryIP){
return "IPv6"
}
return "Neither"
}
return "Neither"
}
func isIpv6(queryIP string) bool{
var arr []string = strings.Split(queryIP,":")
if len(arr)!=8 {
return false
}
for i:=0;i<len(arr);i++ {
if !ipv6Helper(arr[i]){
return false
}
}
return true
}
func ipv6Helper(ip string) bool{
if len(ip)==0 || len(ip)>4{
return false
}
// 将16进制的ip转为int64看是否可以转 ,如果不能转,则返回err!=nil
_,err := strconv.ParseInt(ip,16,64)
return err == nil
}
func isIpv4(queryIP string) bool{
var arr []string = strings.Split(queryIP,".")
if len(arr)!=4 {
return false
}
for i:=0;i<len(arr);i++ {
if !ipv4Helper(arr[i]){
return false
}
}
return true
}
func ipv4Helper(ip string) bool{
if len(ip)==0 || len(ip)>3 {
return false
}
if ip[0]=='0' && len(ip)!=1{
return false
}
// 将ip转为十进制的int
i,err := strconv.Atoi(ip)
if err != nil {
return false
}
return i>=0 && i<=255
}
复制
解题思路
通过left join + where is not null 过滤出在product表中的数据
通过group by + count(distinct(xxx)) 来过滤出所有商品
select c.customer_id
from customer c left join product p on c.product_key = p.product_key
where p.product_key is not null # 排除用户购买了一些不在product表中的商品
group by c.customer_id
# 同一个用户可能买了一个商品多次,因此通过distinct去重
having count(distinct(p.product_key)) = (
# 所有产品的数量
select count(*)
from product
)
复制
题目描述
合作过至少三次的演员和导演
解题思路
按照演员id和导演id进行分组,多字段分组必须要所有字段一致才会分到同一组
select actor_id,director_id
from actordirector
group by actor_id,director_id
having count(*) >=3
复制
题目描述
体育馆的人流量
解题思路
需要连续自增的三个id的时候,可以通过id = id-1,id=id-2进行leftjoin
union 具有去重功能, union all 不会进行去重
当我们查询的时候需要一些中间表的时候,这个中间表必须要起一个别名
select *
from(
select s1.*
from stadium s1 left join stadium s2 on s1.id = s2.id-1
left join stadium s3 on s1.id = s3.id-2 # 这个from语句体现了连续的id
where s2.id is not null and s3.id is not null and s1.people>=100 and s2.people>=100 and s3.people>=100
union
select s2.*
from stadium s1 left join stadium s2 on s1.id = s2.id-1
left join stadium s3 on s1.id = s3.id-2
where s2.id is not null and s3.id is not null and s1.people>=100 and s2.people>=100 and s3.people>=100
union
select s3.*
from stadium s1 left join stadium s2 on s1.id = s2.id-1
left join stadium s3 on s1.id = s3.id-2
where s2.id is not null and s3.id is not null and s1.people>=100 and s2.people>=100 and s3.people>=100
) tmp order by id
复制
文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
golang实现mcp的sse传输方式
golang算法架构leetcode技术php
25次阅读
2025-04-21 10:35:07
golang langchan mcp adapter
golang算法架构leetcode技术php
21次阅读
2025-04-17 10:41:53
golang操作向量数据库qdrant
golang算法架构leetcode技术php
17次阅读
2025-04-07 09:44:52
【转载】golang内存分配
京东云开发者
16次阅读
2025-03-31 15:09:05
主流Linux操作系统各版本网卡配置方法汇总,建议收藏!
运维李哥不背锅
12次阅读
2025-04-10 07:30:13
golang实现mcp client(1)
golang算法架构leetcode技术php
11次阅读
2025-04-14 09:40:20
golang实现mcp client(2)
golang算法架构leetcode技术php
10次阅读
2025-04-14 09:40:19