2024-07-31:用go语言,给定两个正整数数组arr1和arr2,我们要找到属于arr1的整数x和属于arr2的整数y组成的所有数对(x, y)中,具有最长公共前缀的长度。 公共前缀是指两个数的
2024-07-31:用go语言,给定两个正整数数组arr1和arr2,我们要找到属于arr1的整数x和属于arr2的整数y组成的所有数对(x, y)中,具有最长公共前缀的长度。
公共前缀是指两个数的最左边的一位或多位数字相同的部分。例如,对于整数5655359和56554来说,它们的公共前缀是565,而对于1223和43456来说,它们没有公共前缀。
我们需要找出所有数对(x, y)中具有最长公共前缀的长度是多少,如果没有公共前缀则返回0。
输入:arr1 = [1,10,100], arr2 = [1000]
输出:3
解释:存在 3 个数对 (arr1[i], arr2[j]) :
(1, 1000) 的最长公共前缀是 1 。(10, 1000) 的最长公共前缀是 10 。(100, 1000) 的最长公共前缀是 100 。
最长的公共前缀是 100 ,长度为 3 。
答案2024-07-31:
题目来自leetcode3043。
大体步骤如下:
要解决给定问题,主要分为以下大体步骤:
初始化一个集合:创建一个映射(集合)
has,用于存储arr1中所有整数的前缀。这个集合将用于后续查找整数是否在arr1中的某个前缀。提取前缀:遍历
arr1中的每个整数,对于每个整数,计算其每个可能的前缀(即数字逐位除以10,直到数字为0),并将每个前缀存入has集合中。这将使得has含有arr1中所有数字的所有前缀。初始化一个最大值:设置一个变量
mx,用于记录在arr2中找到的最大公共前缀。查找公共前缀:遍历
arr2中的每个整数,对于每个整数,计算其每个可能的前缀(同样逐位除以10),并在集合has中检查该前缀是否存在。如果存在,则更新mx为当前整数的前缀值,与当前存储的mx进行比较,保留较大的值。计算结果:检查
mx的值,如果mx为0,表示没有找到公共前缀,返回0。若mx不为0,计算其对应的长度,即将mx转为字符串并取其长度,然后返回这个长度作为结果。输出结果:通过主函数调用
longestCommonPrefix函数,传递两个整数数组,然后打印返回的最长公共前缀的长度。
时间复杂度:
- 遍历数组
arr1和arr2的时间复杂度是O(n * k),其中n是arr2的长度,k是数字的位数(前缀寻找的迭代次数)。但是由于数字的位数是有限的,我们可以认为k是一个常数。因此主要复杂度由遍历造成,即O(n)。
额外空间复杂度:
- 使用集合
has存储前缀,每个整数的前缀数量最多为其位数,因此在最坏情况下,空间复杂度是O(m * k),其中m是arr1的长度,k是数字的位数(符合前缀数量)。但是由于k是常数,所以可以简化为O(m)。总体来说,这个算法在空间上的额外消耗是O(m)。
Go完整代码如下:
package main
import (
"fmt"
"strconv"
)
func longestCommonPrefix(arr1, arr2 []int) int {
has := map[int]bool{}
for _, v := range arr1 {
for ; v > 0; v /= 10 {
has[v] = true
}
}
mx := 0
for _, v := range arr2 {
for ; v > 0 && !has[v]; v /= 10 {
}
mx = max(mx, v)
}
if mx == 0 {
return 0
}
return len(strconv.Itoa(mx))
}
func main() {
arr1 := []int{1, 10, 100}
arr2 := []int{1000}
fmt.Println(longestCommonPrefix(arr1, arr2))
}

Python完整代码如下:
# -*-coding:utf-8-*-
def longest_common_prefix(arr1, arr2):
has = set()
# 将 arr1 中的所有数字的每个前缀加入集合
for v in arr1:
while v > 0:
has.add(v)
v //= 10
mx = 0
# 在 arr2 中找到最大的与 arr1 前缀相同的数字
for v in arr2:
while v > 0 and v not in has:
v //= 10
mx = max(mx, v)
if mx == 0:
return 0
return len(str(mx))
if __name__ == "__main__":
arr1 = [1, 10, 100]
arr2 = [1000]
print(longest_common_prefix(arr1, arr2))

2024-07-31:用go语言,给定两个正整数数组arr1和arr2,我们要找到属于arr1的整数x和属于arr2的整数y组成的所有数对(x, y)中,具有最长公共前缀的长度。 公共前缀是指两个数的的更多相关文章
- 取两个String数组的交集
import org.testng.annotations.Test; import java.util.HashMap; import java.util.LinkedList; import ja ...
- [华为]查找两个字符串a,b中的最长公共子
链接:https://www.nowcoder.com/questionTerminal/181a1a71c7574266ad07f9739f791506来源:牛客网 查找两个字符串a,b中的最长公共 ...
- 两层嵌套list,选取list中最长的list的长度
# coding=utf-8 import pandas as pd file_path = "test_aa.xlsx" dt = pd.read_excel(file_path ...
- LeetCode -- 求字符串数组中的最长公共前缀
题目描写叙述: Write a function to find the longest common prefix string amongst an array of strings.就是给定1个 ...
- JavaScript中两个对象数组 属性undefined
var BaiduUsers = []; var UserArray = function(name, phone, id, id2) { this.name = name; this.phone = ...
- 聊聊iOS中网络编程长连接的那些事
1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...
- POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)
题意: 给定 n 个字符串,求出现在不小于 k 个字符串中的最长子串. 分析: 将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组. 然后二分答案,将后缀分成若干组,判断 ...
- 【分步详解】两个有序数组中的中位数和Top K问题
(这也是一道leetcode的经典题目:<LeetCode>解题笔记:004. Median of Two Sorted Arrays[H] 问题介绍 这是个超级超级经典的分治算法!!这个 ...
- Leecode刷题之旅-C语言/python-88合并两个有序数组
/* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...
- java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度
package tek; Java算法——求出两个字符串的最长公共字符串 /** * @Title: 问题:有两个字符串str1和str2,求出两个字符串中最长公共字符串. * @author 匹夫( ...
随机推荐
- GNU GCC学习
1 Introduction 参考视频:1 GCC简介_哔哩哔哩_bilibili 参考书籍:<An Introduction to GCC (Brian J. Gough, Richard.p ...
- CF98C Help Greg the Dwarf 题解
CF98C Help Greg the Dwarf 题解 为什么不三分? 首先我们考虑如何求出答案. 如图,考虑设夹角为 \(\theta\),那么可以得到表达式: \[[\cfrac a {\tan ...
- kettle从入门到精通 第十四课 kettle kafka 生产者和消费者
1.本节课讲解kafka生产者和消费者两个步骤.这两个组件可以实现数据实时同步(后续课程会讲解). 2.kafka producer 步骤 1)step name:自定义名称 2)connection ...
- 红米K70E支付宝无指纹支付选项的解决方法
红米K70E这台手机,支付宝里无指纹支付选项,百度了一下,也没结果.自己摸索了下,终于折腾出了指纹支付. 解决方法: 在手机-设置-指纹.面部与密码-指纹解锁-指纹支付-支付宝-更新证书. 杀掉支付宝 ...
- Scrapy框架(三)--全站数据爬取
scrapy基于Spider类的全站数据爬取 大部分的网站展示的数据都进行了分页操作,那么将所有页码对应的页面数据进行爬取就是爬虫中的全站数据爬取.基于scrapy如何进行全站数据爬取呢?1.将每一个 ...
- MoneyPrinterPlus:AI自动短视频生成工具,赚钱从来没有这么容易过
这是一个轻松赚钱的项目. 短视频时代,谁掌握了流量谁就掌握了Money! 所以给大家分享这个经过精心打造的MoneyPrinterPlus项目. 它可以:使用AI大模型技术,一键批量生成各类短视频. ...
- 接口加密传输设计及AES加解密代码DEMO
接口加密传输设计及AES加解密代码DEMO 接口加密的方案设计:可以将请求的json字符串aes加密,通过params字段传输,接口服务端接收到参数,先解密,然后转换成对象.继续业务逻辑的处理.(另外 ...
- Django设置、使用Cookie
使用背景: 前端根据用户选择的模块,结合ajax实现局部刷新,进到到具体模块页面后,返回,希望保持到原来选择的模块上,这就需要保存当前选择的模块id; 尝试: 1.使用Js的设置cookie,douc ...
- C#中关于 object,dynamic 一点使用心得
首先说一下使用场景 WebAPI接口入参使用 object和 dynamic 后续解析和处理 1.object和dynamic 区别 在.NET中,object和dynamic也有一些区别: obj ...
- 全国产!全志A40i+Logos FPGA核心板(4核ARM Cortex-A7)硬件说明
硬件资源 SOM-TLA40iF核心板板载ARM.FPGA.ROM.RAM.晶振.电源.LED等硬件资源,并通过B2B连接方式引出IO.核心板所有器件(包括B2B连接器)均采用国产工业级方案,国产化率 ...