2022-05-18:假设数组a和数组b为两组信号:

  1. length(b) <= length(a);
  2. 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[i+1] - a[i]。
    那么就称信号b和信号a一致,记为b==a,
    给你好多b数组,假设有m个: b0数组、b1数组…
    给你好多a数组,假设有n个: a0数组、a1数组…
    返回一个长度为m的结果数组ans,ans[i]表示 : bi数组和多少个a数组一致。
    来自字节飞书团队。

答案2022-05-18:

前缀树。

代码用rust编写。代码如下:

use std::collections::HashMap;
use std::sync::Arc;
use std::sync::Mutex; fn main() {
let mut bs: Vec<Vec<isize>> = vec![vec![1, 7, 5], vec![2, 8, 6, 24]];
let mut as0: Vec<Vec<isize>> = vec![vec![1, 7, 5], vec![2, 8, 6, 24]];
let ans = same_teams_array(&mut bs, &mut as0);
println!("ans = {:?}", ans);
} fn same_teams_array(bs: &mut Vec<Vec<isize>>, as0: &mut Vec<Vec<isize>>) -> Vec<isize> {
let m = bs.len() as isize;
let mut root = Arc::new(Mutex::new(TrieNode::new()));
let mut cur = Arc::clone(&mut root);
let mut cur2 = Arc::clone(&mut cur);
for i in 0..m {
let k = bs[i as usize].len() as isize;
cur = Arc::clone(&mut root);
for j in 1..k {
let diff = bs[i as usize][j as usize] - bs[i as usize][(j - 1) as usize];
if !cur.lock().unwrap().nexts.contains_key(&diff) {
cur.lock()
.unwrap()
.nexts
.insert(diff, Arc::new(Mutex::new(TrieNode::new())));
}
let c2 = Arc::clone(&mut cur.lock().unwrap().nexts.get(&diff).unwrap());
cur = c2;
}
cur.lock().unwrap().indices.push(i);
}
let mut ans: Vec<isize> = vec![];
for _i in 0..m {
ans.push(0);
}
let n = as0.len() as isize;
for i in 0..n {
let k = as0[i as usize].len() as isize;
cur = Arc::clone(&mut root);
for j in 1..k {
let diff = as0[i as usize][j as usize] - as0[i as usize][(j - 1) as usize];
if !cur.lock().unwrap().nexts.contains_key(&diff) {
break;
}
let c2 = Arc::clone(&mut cur.lock().unwrap().nexts.get(&diff).unwrap());
cur = c2;
for index in &cur.lock().unwrap().indices {
ans[(*index) as usize] += 1;
}
}
}
return ans;
} pub struct TrieNode {
pub indices: Vec<isize>,
pub nexts: HashMap<isize, Arc<Mutex<TrieNode>>>,
} impl TrieNode {
pub fn new() -> Self {
Self {
indices: vec![],
nexts: HashMap::new(),
}
}
}

执行结果如下:


左神java代码

2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[i+1的更多相关文章

  1. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  2. 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」

    假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 ...

  3. 【C语言学习】-05 二维数组、字符串数组、多维数组

    ⼆二维数组.字符串数组.多维数组

  4. java学习第05天(数组常见操作、数组中的数组)

    (4)数组常见操作 a.遍历取值 class ArrayDemo3 { public static void main(String[] args) { //System.out.println(&q ...

  5. 10.排序数组中和为给定值的两个数字[Find2NumbersWithGivenSum]

    [题目] 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可. 例如输入数组1 ...

  6. tensorflow 关于 矩阵 运算 + 符号得含义。 2维 数组 + 1纬数组, 就是每一行都 加一边 1纬数组。 呵呵

    小锋子Shawn(403568338)  13:51:23mnist.training.images?墨须(964489899)  13:51:27我的图片是100*100的,该怎么兼容.  小锋子S ...

  7. ASP数组全集,多维数组和一维数组[转]

    ASP数组是比较好用的装载大量数据的容器.1 定义数组 有两种方式:DIM和REDIM. DIM定义的是固定个数.数据类型的数组:而REDIM则不同,它可以定义不同类型的数据,也可以定义个数并非固定的 ...

  8. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  9. 如何交换两个等长整形数组使其数组和的差最小(C和java实现)

    1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...

  10. 转:最小区间:k个有序的数组,找到最小区间使k个数组中每个数组至少有一个数在区间中

    转:http://www.itmian4.com/thread-6504-1-1.html 最小区间原题 k个有序的数组,找到最小的区间范围使得这k个数组中,每个数组至少有一个数字在这个区间范围内.比 ...

随机推荐

  1. Arduino优化 减少重复代码 例2

    Example->Blink: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUI ...

  2. [HCTF 2018]WarmUp 1

    主页面是一个滑稽 得到source.php 观看源码,提示source.php 访问看到源码 <?php highlight_file(__FILE__); class emmm { publi ...

  3. DVWA-SQL Injection (Bind) SQL盲注

    盲注同于union select查询注入,盲注只能得到数据库回显的正确和错误,利用返回的正确和错误一个一个判断. LOW 审计源码 <?php if( isset( $_GET[ 'Submit ...

  4. ARP欺骗工具-arpspoof

    arpspoof arpspoof是dsniff下的一个ARP欺骗工具 大概原理: 两台主机HostA 和 HostB想要进行通信的流程,那么主机A将需要知道自己的ip,mac 以及主机B的ip, m ...

  5. java的maven项目打包成.exe可执行文件

    打包exe可执行脚本: 1.源代码maven项目写完后打包成可执行jar包,此处我使用的是assembly插件. <plugin> <groupId>org.apache.ma ...

  6. JAVA重试机制多种方式深入浅出

    重试机制在分布式系统中,或者调用外部接口中,都是十分重要的. 重试机制可以保护系统减少因网络波动.依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制. 为了方便说明,先假设我们想要进行 ...

  7. Android笔记--图形控制

    图形Drawable 形状图形(其定义文件是以shape标签为根节点的XML描述文件,支持四种类型的形状) 具体实现: 在shape标签里面,solid指定填充的颜色,stroke指定边框颜色,cor ...

  8. Cesium 后处理(Post Process)

    原文地址:https://blog.csdn.net/ls870061011/article/details/123910821 作者:GIS李胜 为实现三维模型的更炫.更酷.更美观,Cesium在1 ...

  9. java多线程--2 静态代理、Lambda表达式

    java多线程--2 静态代理.Lambda表达式 静态代理 package com.ssl.demo02; //静态代理 //真实对象和代理对象都要实现同一个接口 //代理对象必须要代理真实角色 / ...

  10. vue中新的状态管理器-pinia

    背景 对于pinia的使用,可参考官方文档在这不做过多赘述.这边主要来讲讲pinia中 少用且好用的方法,为什么我们选择pinia而不用vuex ps: 以下写法全部基于组合式API 使用方式: 先下 ...