【Leetcode -733.图像渲染 -744.寻找比目标字母大的最小字母】

简介: 【Leetcode -733.图像渲染 -744.寻找比目标字母大的最小字母】

Leetcode -733.图像渲染

题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。

你也被给予三个整数 sr, sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。

为了完成 上色工作 ,从初始像素开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,

接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。

将所有有记录的像素点的颜色值改为 newColor 。最后返回 经过上色渲染后的图像 。

示例 1:

输入: image = [[1, 1, 1], [1, 1, 0], [1, 0, 1]] ,sr = 1, sc = 1, newColor = 2

输出 : [[2, 2, 2], [2, 2, 0], [2, 0, 1]]

解析 : 在图像的正中间,(坐标(sr, sc) = (1, 1)), 在路径上所有符合条件的像素点的颜色都被更改成2。

注意,右下角的像素没有更改为2,因为它不是在上下左右四个方向上与初始点相连的像素点。

示例 2 :

输入 : image = [[0, 0, 0], [0, 0, 0]], sr = 0, sc = 0, newColor = 2

输出 : [[2, 2, 2], [2, 2, 2]]

提示 :

m == image.length

n == image[i].length

1 <= m, n <= 50

0 <= image[i][j], newColor < 216

0 <= sr < m

0 <= sc < n

const int dx[4] = { 1,-1,0,0 };
    const int dy[4] = { 0,0,1,-1 };
    void dfs(int** image, int row, int col, int x, int y, int currcolor, int color)
    {
        //如果当前坐标像素值等于初始坐标像素值,进行深度搜索
        if (image[x][y] == currcolor)
        {
            //先将当前元素像素值改成需要改变的颜色的像素
            image[x][y] = color;
            //再判断该坐标的上下左右坐标
            for (int i = 0; i < 4; i++)
            {
                int rx = x + dx[i], cy = y + dy[i];
                if (rx >= 0 && rx < row && cy >= 0 && cy < col)
                {
                    dfs(image, row, col, rx, cy, currcolor, color);
                }
            }
        }
    }
    int** floodFill(int** image, int imageSize, int* imageColSize, int sr, int sc, int color, int* returnSize, int** returnColumnSizes)
    {
        //返回的行长度
        *returnSize = imageSize;
        //返回的列,因为需要返回的是二维数组,需要将原二维数组的列数一个一个放入返回的列二维数组
        *returnColumnSizes = (int*)malloc(sizeof(int) * imageSize);
        for (int i = 0; i < imageSize; i++)
        {
            (*returnColumnSizes)[i] = imageColSize[0];
        }
        //记录初始坐标的像素值
        int currcolor = image[sr][sc];
        //如果初始坐标像素值不等于需要修改的颜色值,进入dfs函数进行深度搜索
        //否则直接返回原数组
        if (currcolor != color)
        {
            dfs(image, imageSize, imageColSize[0], sr, sc, currcolor, color);
        }
        return image;
    }

Leetcode -744.寻找比目标字母大的最小字母

题目:给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。

返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。

示例 1:

输入 : letters = [“c”, “f”, “j”],target = “a”

输出 : “c”

解释:letters 中字典上比 ‘a’ 大的最小字符是 ‘c’。

示例 2 :

输入 : letters = [“c”, “f”, “j”], target = “c”

输出 : “f”

解释:letters 中字典顺序上大于 ‘c’ 的最小字符是 ‘f’。

示例 3 :

输入 : letters = [“x”, “x”, “y”, “y”], target = “z”

输出 : “x”

解释:letters 中没有一个字符在字典上大于 ‘z’,所以我们返回 letters[0]。

提示:

2 <= letters.length <= 10^4

letters[i] 是一个小写字母

letters 按非递减顺序排序

letters 最少包含两个不同的字母

target 是一个小写字母

char nextGreatestLetter(char* letters, int lettersSize, char target)
    {
        //如果当前字母大于 target ,因为数组是非递减顺序,所以直接返回这个元素
        //否则返回第一个字母
        for (int i = 0; i < lettersSize; i++)
        {
            if (letters[i] > target)
            {
                return letters[i];
            }
        }
        return letters[0];
    }
目录
相关文章
|
5月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
5月前
|
Python
【Leetcode刷题Python】494. 目标和
LeetCode 494题 "目标和" 的Python解决方案,通过动态规划算法计算在给定整数数组和目标值的情况下,可以构造多少种不同表达式使得运算结果等于目标值。
49 3
|
3月前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
25 1
|
3月前
|
机器学习/深度学习
Leetcode第48题(旋转图像)
这篇文章介绍了LeetCode第48题“旋转图像”的解题方法,通过原地修改二维矩阵实现图像的顺时针旋转90度。
39 0
Leetcode第48题(旋转图像)
|
3月前
|
算法
Leetcode第十七题(电话号码的字母组合)
这篇文章介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode第17题——电话号码的字母组合问题,通过递归方法生成所有可能的字母组合。
28 0
Leetcode第十七题(电话号码的字母组合)
|
3月前
|
索引
【LeetCode 11】242.有效的字母异位词
【LeetCode 11】242.有效的字母异位词
24 0
【LeetCode 11】242.有效的字母异位词
|
3月前
|
算法
【LeetCode 52】17.电话号码的字母组合
【LeetCode 52】17.电话号码的字母组合
44 0
|
5月前
|
存储 算法
LeetCode第48题旋转图像
LeetCode第48题"旋转图像"的解题方法,通过两次翻转操作——先水平翻转再对角线翻转,实现了原地旋转矩阵的效果。
LeetCode第48题旋转图像
|
5月前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
7月前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词