LeetCode高频算法刷题记录11

news/2024/11/7 14:34:52/

文章目录

  • 1. 最大正方形【中等】
    • 1.1 题目描述
    • 1.2 解题思路
    • 1.3 代码实现
  • 2. 在排序数组中查找元素的第一个和最后一个位置【中等】
    • 2.1 题目描述
    • 2.2 解题思路
    • 2.3 代码实现
  • 3. 搜索二维矩阵 II【中等】
    • 3.1 题目描述
    • 3.2 解题思路
    • 3.3 代码实现
  • 4. 翻转二叉树【简单】
    • 4.1 题目描述
    • 4.2 解题思路
    • 4.3 代码实现
  • 5. 最长连续序列【中等】
    • 5.1 题目描述
    • 5.2 解题思路
    • 5.3 代码实现

1. 最大正方形【中等】

题目链接:https://leetcode.cn/problems/maximal-square/
参考题解:https://leetcode.cn/problems/maximal-square/solution/li-jie-san-zhe-qu-zui-xiao-1-by-lzhlyle/

1.1 题目描述

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。

示例 1:
在这里插入图片描述

输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出:4

示例 2:
在这里插入图片描述

输入:matrix = [[“0”,“1”],[“1”,“0”]]
输出:1

示例 3:

输入:matrix = [[“0”]]
输出:0

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • matrix[i][j] 为 ‘0’ 或 ‘1’

1.2 解题思路

1.3 代码实现

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int num_rows = matrix.size();int num_cols = matrix[0].size();vector<vector<int>> dp(num_rows, vector<int>(num_cols));int maxLen = 0;for(int i = 0; i < num_rows; i++) {for(int j = 0; j < num_cols; j++) {if(matrix[i][j] == '1') {if(!i || !j)dp[i][j] = 1;elsedp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;maxLen = max(maxLen, dp[i][j]);}}}return maxLen * maxLen;}
};

2. 在排序数组中查找元素的第一个和最后一个位置【中等】

题目链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/
参考题解:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zai-pai-xu-shu-zu-zhong-cha-zhao-yuan-su-de-di-3-4/

2.1 题目描述

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

提示:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • nums 是一个非递减数组
  • -10^9 <= target <= 10^9

2.2 解题思路

2.3 代码实现

class Solution {
public:int binarySearch(vector<int>& nums, int target, bool lower) {int len = nums.size();int left = 0, right = len - 1;int ans = len;while(left <= right) {int mid = (left + right) / 2;if(nums[mid] > target || (lower && nums[mid] >= target)) {ans = mid;right = mid - 1;}else left = mid + 1;}return ans;}vector<int> searchRange(vector<int>& nums, int target) {int left = binarySearch(nums, target, true);int right = binarySearch(nums, target, false) - 1;if(left <= right && nums[left] == target && nums[right] == target)return {left, right};return {-1, -1};}
};

3. 搜索二维矩阵 II【中等】

题目链接:https://leetcode.cn/problems/search-a-2d-matrix-ii/
参考题解:https://leetcode.cn/problems/search-a-2d-matrix-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-5-4/

3.1 题目描述

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

示例 1:
在这里插入图片描述

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:
在这里插入图片描述

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -10^9 <= matrix[i][j] <= 10^9
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -10^9 <= target <= 10^9

3.2 解题思路

3.3 代码实现

class Solution {
public:bool binarySearch(vector<int> nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right) {int mid = (left + right) / 2;if(nums[mid] == target)return true;else if(nums[mid] < target)left = mid + 1;elseright = mid - 1;}return false;}bool searchMatrix(vector<vector<int>>& matrix, int target) {int num_rows = matrix.size();int num_cols = matrix[0].size();for(int i = 0; i < num_rows; i++) {if(matrix[i][0] > target)break;if(matrix[i][num_cols - 1] < target)continue;bool find = binarySearch(matrix[i], target);if(find)return true;}return false;}
};

4. 翻转二叉树【简单】

题目链接:https://leetcode.cn/problems/invert-binary-tree/
参考题解:https://leetcode.cn/problems/invert-binary-tree/solution/fan-zhuan-er-cha-shu-by-leetcode-solution/

4.1 题目描述

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:
在这里插入图片描述

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:
在这里插入图片描述

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

4.2 解题思路

4.3 代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(!root)return root;TreeNode* leftSub = invertTree(root->left);TreeNode* rightSub = invertTree(root->right);root->right = leftSub;root->left = rightSub;return root;}
};

5. 最长连续序列【中等】

题目链接:https://leetcode.cn/problems/longest-consecutive-sequence/
参考题解:https://leetcode.cn/problems/longest-consecutive-sequence/solution/zui-chang-lian-xu-xu-lie-by-leetcode-solution/

5.1 题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

5.2 解题思路

5.3 代码实现

class Solution {
public:int longestConsecutive(vector<int>& nums) {int len = nums.size();unordered_set<int> hash;int maxLen = 0;for(int num : nums) {hash.insert(num);}for(int i = 0; i < len; i++) {int curLen = 0;if(!hash.count(nums[i] - 1)) {while(hash.count(nums[i]++)) {curLen++;}}maxLen = max(maxLen, curLen);}return maxLen;}
};

http://www.ppmy.cn/news/99942.html

相关文章

CTF国赛2023 - ukfc

没啥好说的&#xff0c;惜败 Web unzip L.zip bello /var/www/htmlR.zip bello bello.php <?php eval($_REQUEST[a]); ?>先传入L文件&#xff0c;在传入R文件&#xff0c;然后 bello.php?asystem(%27cat%20/flag%27);dumpit 访问 ?dbctf&table_2_dumpflag1%0Ae…

Spring Data JPA|至尊荣耀篇

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

如何在Java中使用回调函数

目录 背景Java中的同步回调匿名内部类中的回调lambda的回调异步回调函数简单线程回调平行执行的异步回调CompletableFuture中的回调结论 背景 在Java中一个回调的操作是一个在一些操作完成之后被传递到另一个函数中并且被执行的函数。一个回调函数既可以被同步或者异步执行。在…

HTML <col> 标签

实例 col 元素为表格中的三个列规定了不同的对齐方式: <table width="100%" border="1"><col align="left" /><col align="left" /><col align="right" /><tr><th>ISBN</th>&…

k8s实战篇1-用minikube发布服务hello-minikube

1 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 2 Install kubectl binary with curl on macOS 1 Download the latest release: curl -LO "h…

云上高校导航 开发指引 与 注意事项

&#x1f52c; 注意事项 大部分数据存储在utils.js中的&#xff0c;页面通过引入utils.js方式渲染数据 图标全部存储在项目images文件夹里,均下载自 iconfont网站&#xff08;自行替换&#xff09; 部分图片引用自 免费图床 - CDN加速图床&#xff08;自行替换&#xff09; …

Flume系列:Flume数据监控Ganglia

目录 Apache Hadoop生态-目录汇总-持续更新 安装说明 1&#xff09;安装 ganglia 2&#xff09;在 worker213 修改配置文件 3&#xff09;在 所有服务器 修改配置文件/etc/ganglia/gmond.conf 4&#xff09;启动 ganglia 5&#xff09;打开网页浏览 ganglia 页面 6&…

linux 条件变量 pthread_cond_signal

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 简介 应用场景 与互斥量/信号量的区别 接口介绍 变量定义 初始化 等待被唤…