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:

chatgpt

题目来自leetcode3043。

大体步骤如下:

要解决给定问题,主要分为以下大体步骤:

  1. 初始化一个集合:创建一个映射(集合)has,用于存储arr1中所有整数的前缀。这个集合将用于后续查找整数是否在arr1中的某个前缀。

  2. 提取前缀:遍历arr1中的每个整数,对于每个整数,计算其每个可能的前缀(即数字逐位除以10,直到数字为0),并将每个前缀存入has集合中。这将使得has含有arr1中所有数字的所有前缀。

  3. 初始化一个最大值:设置一个变量mx,用于记录在arr2中找到的最大公共前缀。

  4. 查找公共前缀:遍历arr2中的每个整数,对于每个整数,计算其每个可能的前缀(同样逐位除以10),并在集合has中检查该前缀是否存在。如果存在,则更新mx为当前整数的前缀值,与当前存储的mx进行比较,保留较大的值。

  5. 计算结果:检查mx的值,如果mx为0,表示没有找到公共前缀,返回0。若mx不为0,计算其对应的长度,即将mx转为字符串并取其长度,然后返回这个长度作为结果。

  6. 输出结果:通过主函数调用longestCommonPrefix函数,传递两个整数数组,然后打印返回的最长公共前缀的长度。

时间复杂度:

  • 遍历数组arr1arr2的时间复杂度是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)中,具有最长公共前缀的长度。 公共前缀是指两个数的的更多相关文章

  1. 取两个String数组的交集

    import org.testng.annotations.Test; import java.util.HashMap; import java.util.LinkedList; import ja ...

  2. [华为]查找两个字符串a,b中的最长公共子

    链接:https://www.nowcoder.com/questionTerminal/181a1a71c7574266ad07f9739f791506来源:牛客网 查找两个字符串a,b中的最长公共 ...

  3. 两层嵌套list,选取list中最长的list的长度

    # coding=utf-8 import pandas as pd file_path = "test_aa.xlsx" dt = pd.read_excel(file_path ...

  4. LeetCode -- 求字符串数组中的最长公共前缀

    题目描写叙述: Write a function to find the longest common prefix string amongst an array of strings.就是给定1个 ...

  5. JavaScript中两个对象数组 属性undefined

    var BaiduUsers = []; var UserArray = function(name, phone, id, id2) { this.name = name; this.phone = ...

  6. 聊聊iOS中网络编程长连接的那些事

    1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...

  7. POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)

    题意: 给定 n 个字符串,求出现在不小于 k 个字符串中的最长子串. 分析: 将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组. 然后二分答案,将后缀分成若干组,判断 ...

  8. 【分步详解】两个有序数组中的中位数和Top K问题

    (这也是一道leetcode的经典题目:<LeetCode>解题笔记:004. Median of Two Sorted Arrays[H] 问题介绍 这是个超级超级经典的分治算法!!这个 ...

  9. Leecode刷题之旅-C语言/python-88合并两个有序数组

    /* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...

  10. java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度

    package tek; Java算法——求出两个字符串的最长公共字符串 /** * @Title: 问题:有两个字符串str1和str2,求出两个字符串中最长公共字符串. * @author 匹夫( ...

随机推荐

  1. GCD Timer事件的精度

    一.测试环境 iPhoneX 真机+Debug模式,Timer代码工作在主线程,主线程空闲不阻塞 在子线程统计每3秒tick计数,逐步减小inteval,看能达到多大精度. 忽略原子计数值操作的影响 ...

  2. Django路由层、视图层及模板层

    Django路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表; 你就是以这种方式告诉Django,对于客户端发来的某个UR ...

  3. 一个开源且全面的C#算法实战教程

    前言 算法在计算机科学和程序设计中扮演着至关重要的角色,如在解决问题.优化效率.决策优化.实现计算机程序.提高可靠性以及促进科学融合等方面具有广泛而深远的影响.今天大姚给大家分享一个开源.免费.全面的 ...

  4. Javascript高级程序设计第五章 | ch5 | 阅读笔记

    基本引用类型 Date 在不给定时间的情况下创建Date实例,创建的对象将保存当前的日期和时间. 要基于其他时间创建Date对象,必须传入其毫秒时表示 Date.parse() 月/日/年(5/21/ ...

  5. js沙雕排序之睡眠排序&随机排序

    1.睡眠排序,只要睡的时间多少就可以排序出来不要在乎时间多少 var arr=[4,77,741,41,142,52,244]; var sleepSort=function(arr,callback ...

  6. 高德地图查询结果返回INVALID_USER_IP错误解决

    高德地图查询结果返回INVALID_USER_IP错误解决 方法是添加白名单.IP白名单出错,发送请求的服务器IP不在IP白名单内开发者在LBS官网控制台设置的IP白名单不正确.白名单中未添加对应服务 ...

  7. OpenCompass 作业

    Smiling & Weeping ---- 愿我们都做生活的高手 -- 昭阳&乐瑶

  8. C# .NET core Avalonia 11.0版本,发布linux和MAC的简单记录

    .net core 7.0+centos 7.0 cetnos目前运行在hyper V虚拟机里 虚拟机部署的注意事项 1 需要配置网络环境, 确保在同一局域网下 如果sftp无法连接 ctrl+shi ...

  9. CentOS7系统搭建web环境 php&nginx&pgsql

    环境:VMware.CentOS-7-x86_64-DVD-2009.iso.nginx-1.26.1.php-7.2.0.postgresql-12 php最好安装对应php项目所需版本,否则会出现 ...

  10. .net core SM2加密+PKCS8实现

    前阵子在对接银行接口,对方给出的加密方式是SM2,在网上找了不少教程,都是使用Portable.BouncyCastle实现的,功能实现后发现对方给出的密钥格式是PKCS8,下面代码记录一下PKCS8 ...