【每日一题Day59】LC1764通过连接另一个数组的子数组得到一个数组 | 双指针模拟

简介: 如果不存在下标为 k 的元素 nums[k] 属于不止一个子数组,就称这些子数组是 不相交 的。子数组指的是原数组中连续元素组成的一个序列。

通过连接另一个数组的子数组得到一个数组【LC1764】


You are given a 2D integer array groups of length n. You are also given an integer array nums.


You are asked if you can choose n disjoint subarrays from the array nums such that the ith subarray is equal to groups[i] (0-indexed), and if i > 0, the (i-1)th subarray appears before the ith subarray in nums (i.e. the subarrays must be in the same order as groups).


Return true if you can do this task, and false otherwise.


Note that the subarrays are disjoint if and only if there is no index k such that nums[k] belongs to more than one subarray. A subarray is a contiguous sequence of elements within an array.


给你一个长度为 n 的二维整数数组 groups ,同时给你一个整数数组 nums 。


你是否可以从 nums 中选出 n 个 不相交 的子数组,使得第 i 个子数组与 groups[i] (下标从 0 开始)完全相同,且如果 i > 0 ,那么第 (i-1) 个子数组在 nums 中出现的位置在第 i 个子数组前面。(也就是说,这些子数组在 nums 中出现的顺序需要与 groups 顺序相同)


如果你可以找出这样的 n 个子数组,请你返回 true ,否则返回 false 。


如果不存在下标为 k 的元素 nums[k] 属于不止一个子数组,就称这些子数组是 不相交 的。子数组指的是原数组中连续元素组成的一个序列。


这代码是真的丑啊

我滴乖乖 忘记发布了


  • 思路:


。使用指针定位数组groups和nums中的元素,指针i定位groups中的某一数组,指针j jj定位groups中数组的某一元素,指针k 定位nums中数组的某一元素。


。从前往后进行匹配,当某一位置匹配不成功时,将nums数组的指针k kk移动到groups[i]首字符的下一位置、groups数组的指针j移动到首字符位置重新匹配,若最后groups中所有子数组均找到对应的子数组,那么返回true


  • 实现


class Solution {
    public boolean canChoose(int[][] groups, int[] nums) {
        int i = 0, j = 0, k = 0;
        while (i < groups.length && k < nums.length){
            if (groups[i][j] == nums[k]){
                j++;
                k++;
                if (j == groups[i].length){
                    i++;
                    j = 0;
                }
            }else if (j != 0){
                k = k - j + 1;
                j = 0;
            }else{
                k++;
            }           
        }
        return i == groups.length;
    }
}


。复杂度


  • 时间复杂度:O(n∗m),n为nums长度,m为group[i]的最大长度
  • 空间复杂度:O ( 1 )
目录
相关文章
|
4天前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
4天前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
4天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
10天前
魔法指针 之 二级指针 指针数组
魔法指针 之 二级指针 指针数组
13 1
|
13天前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
15 0
|
19天前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
2月前
|
搜索推荐 C语言
指针与数组
指针与数组
54 9
|
2月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
2月前
|
存储 程序员 C语言
指针的高级应用:指针数组、数组指针、函数指针等。
指针的高级应用:指针数组、数组指针、函数指针等。
93 0
|
3月前
|
运维
开发与运维数组问题之指针的加减法意义如何解决
开发与运维数组问题之指针的加减法意义如何解决
41 7