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. vue 数组修改 页面无法刷新

    saveData: { current: 1, records:[] , total:0}, countSaveMoney:{ bidSuccessMoney:0, saveMoney:0},页面上有 ...

  2. TCP粘包和拆包

    假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器一次读取的字节数是不确定的,故可能存在以下4中情况: 服务端分两次读到了两个独立的数据包D1和D2,没有粘包和拆包 服务端分一次收到两个数据 ...

  3. vTaskList() 介绍

    vTaskList() 使用注意:使用 vTaskList() 前需使能: make menuconfig -> Component config -> FreeRTOS -> En ...

  4. 在 Sitecore 里使用 Solr 搜索 SortOrder 关联的 Item

    在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丢进 <Instance>\App_Config 下,sitecore 会自动检测配置文件更新并加载到内存中. 通常情 ...

  5. SpringBoot 启动类的原理

    SpringBoot启动类上使用 @SpringBootApplication注解,该注解是一个组合注解,包含多个其它注解.和类定义(SpringApplication.run)要揭开 SpringB ...

  6. 如何提取 x64 程序那些易失的方法参数

    一:背景 1. 讲故事 最近经常遇到有朋友反馈,在 x64 环境下如何提取线程栈中的方法参数,熟悉 x64 调用协定的朋友应该知道,这种协定范围下,方法的前四个参数都是用寄存器传递的,比如rcx,rd ...

  7. upload-labs游戏

    upload-labs游戏 目录 upload-labs游戏 黑名单绕过方式 第1关:JavaScript前端验证 第2关:MIME类型的验证 第3关:特殊后缀的黑名单验证 第4关:.htaccess ...

  8. axios和后端交互时,参数需要写在body和query中同时写

    axios.post('/api/xxx',{ // post body },{ params: { // query } }) demo: let params = { _id:this.alarm ...

  9. 《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么

    一丶什么是程序 程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据. CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言 ...

  10. R语言网络数据爬虫之三个问题

    现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具.Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭.对于那些时间宝贵,又想从网上获取 ...