IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Find Longest Duplicate Path in Matrix -> 正文阅读

[数据结构与算法]Find Longest Duplicate Path in Matrix

Given an integer matrix, find the length of the longest path that have same values. The matrix has no boundary limits. (like, Google Maps - see edit for context)

From each cell, you can either move to two directions: horizontal or vertical. You may NOT move diagonally or move outside of the boundary.

nums = [
[1,1],
[5,5],
[5,5]
]

Return 4 ( Four 5's).

Loading...Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.https://leetcode.com/discuss/interview-question/392780/Doordash-or-Phone-Screen-or-Longest-path-duplicate-numbers-within-a-Matrix

思路: 这题是doordash的真题,重复的number, longest path,这题跟 Longest Increasing Path in a Matrix??不一样的是,他求的元素是相同的,不能用dp来算,longest increasing path, 每个元素都不同,而且有大小关系,只访问一次,所以关系是可以继承的,用cache保住是没有问题的,但是这个题目是一模一样的元素length有多少,那么你是无法cache住的,所以只能以每个点为起点,开始dfs,然后计算每个点的length最大;

package com.company.DoorDash;

import java.util.Arrays;

public class longestDuplicatePath_DoorDash {
    public int findLongestDuplicatePath(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        int globalLongest = 1;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                boolean[][] visited = new boolean[m][n];
                globalLongest = Math.max(globalLongest, dfs(matrix, visited, i, j, matrix[i][j]));
            }
        }
        return globalLongest;
    }

    private int[][] dirs = new int[][]{{0,-1},{0,1},{1,0},{-1,0}};
    private int dfs(int[][] matrix, boolean[][] visited, int x, int y, int target) {
        int m = matrix.length;
        int n = matrix[0].length;
        int count = 1;
        visited[x][y] = true;
        for(int[] dir: dirs) {
            int nx = x + dir[0];
            int ny = y + dir[1];
            if(0 <= nx && nx < m && 0 <= ny && ny < n && !visited[nx][ny] && matrix[nx][ny] == target) {
                count = Math.max(count, 1 + dfs(matrix, visited, nx, ny, target));
            }
        }
        visited[x][y] = false;
        return count;
    }

    public static void main(String[] args) {
        longestDuplicatePath_DoorDash longestDuplicatePath_doorDash = new longestDuplicatePath_DoorDash();
        int[][] nums = {{1,1},
                        {5,5},
                        {5,5}};
        // expected length is: 4;
        System.out.println("findLongestDuplicatePath is:" + longestDuplicatePath_doorDash.findLongestDuplicatePath(nums));
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:12:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:51:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码