navy.star 2022-03-02 10:19 采纳率: 50%
浏览 24
已结题

求最长公共子序列,golong语言

给出两个长度为 n 的整数序列,求它们的最长公共子序列(LCS)的长度,保证第一个序列中所有元素都不重复。
注意:
第一个序列中的所有元素均不重复。
第二个序列中可能有重复元素。
一个序列中的某些元素可能不在另一个序列中出现。
输入格式
第一行包含一个整数 n。

接下来两行,每行包含 n 个整数,表示一个整数序列。

输出格式
输出一个整数,表示最长公共子序列的长度。

数据范围
1≤n≤106,
序列内元素取值范围 [1,106]。
样例
输入样例1:
5
1 2 3 4 5
1 2 3 4 5
输出样例1:
5
输入样例2:
5
1 2 3 5 4
1 2 3 4 5
输出样例2:
4

package main
import  "fmt"
const N=1000110
var(
     id[N]int
     q[N]int 
)
func max(a,b int)int{
    if a > b{
        return a
    }
    return b
}
func main(){
    var n,len,x int
    fmt.Scanf("%d",&n)
    for i:= 0; i < 1000110; i ++ {
        id[i] = -1
    } 
    for i:= 0; i < n; i ++ {
        fmt.Scanf("%d",&x)
        id[x] = i
    }
    len = 0
    q[0] = -1
    for i:= 0; i < n; i ++{
        var x,k,l,r int 
        fmt.Scanf("%d",&x)
        k = id[x]
        if k==-1{
            continue
        }
        l=0
        r=len
        for {
            if l<r{
                var mid int
                mid=(l+r+1)>>1
                if q[mid]<k{
                    l=mid
                }else {
                    r=mid-1
                }
            }else {
                break;
            }
        }
        q[r+1]=k
        len=max(len,r+1)
    } 
    fmt.Println(len)
}
运行结果:TLE(超时,数据大)
我的思路:公共子序列因为不用求具体的序列是多少,我们转化为求公共子序列的下标,因为下标是递增的!
数据达到10000以上时,可不可以AC呢?
  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月5日
  • 创建了问题 3月2日

悬赏问题

  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 c#转安卓 java html
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777
  • ¥50 医院HIS系统代码、逻辑学习
  • ¥30 docker离线安装mysql报错,如何解决?
  • ¥15 构建工单的总账影响在哪里查询或修改