力扣爆刷第151天之TOP100五连刷(回文子串、DFS、旋转数组二分查找)

力扣爆刷第151天之TOP100五连刷(回文子串、DFS、旋转数组二分查找)

文章目录

      • 力扣爆刷第151天之TOP100五连刷(回文子串、DFS、旋转数组二分查找)
      • 一、5. 最长回文子串
      • 二、102. 二叉树的层序遍历
      • 三、33. 搜索旋转排序数组
      • 四、200. 岛屿数量
      • 五、20. 有效的括号

一、5. 最长回文子串

题目链接:https://leetcode.cn/problems/longest-palindromic-substring/description/
思路:求最长回文子串,最简单的思路就是遍历寻找,当然遍历寻找也是需要技巧,从任意一个点位开始,向左右进行对比是否想对。中心的点位可以是1个也可以是2个。如aba,abba,这种。所以分两种情况进行遍历。

class Solution {public String longestPalindrome(String s) {String max = "";for(int i = 0; i < s.length(); i++) {String left = findStr(s, i, i);String right = findStr(s, i, i+1);if(max.length() < left.length()) max = left;if(max.length() < right.length()) max = right;}return max;}String findStr(String s, int left, int right) {while(left >= 0 && right < s.length()) {if(s.charAt(left) != s.charAt(right)) break;left--;right++;}return s.substring(left+1, right);}
}

二、102. 二叉树的层序遍历

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/description/
思路:很经典的题目,只需要借助队列即可实现,先把根节点入队,这样就有了第一层的所有节点,可以获取每一层的节点数量,通过这个节点数量劲出队操作,然后再把子节点加入进来。由此即可实现层序遍历,其中关键点就是每一层的节点数量,这个是由根节点启动的。

class Solution {List<List<Integer>> result = new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {if(root == null) return result;LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()) {int size = queue.size();List<Integer> list = new ArrayList<>();for(int i = 0; i < size; i++) {TreeNode node = queue.poll();list.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}result.add(list);}return result;}
}

三、33. 搜索旋转排序数组

题目链接:https://leetcode.cn/problems/search-in-rotated-sorted-array/description/
思路:题目的意思是把数组从中间任意一个位置截取然后左右互换来形成旋转,其实只要是细心一些就会发现,无论这种选择操作进行多少次,最后都是一个形状,也就是如下的形状,题目要求时间复杂度log(n),显然二分查找,非递增怎么进行二分查找呢?其实很简单,一样是计算中值,只不过之前是计算中值之后和target进行比较,来判断target位于哪一个区间,现在依然要进行这一步,却需要先用中值与左边界进行比较,可以得到点位①和点位②是情况。
如果是点位①,则可以通过targer与点位①和左边界的比较来判断,该去点位①的左边寻找target还是右边。
如果是点位②,同样如此。
在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length-1;while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] == target) return mid;if(nums[mid] >= nums[left]) {if(target >= nums[left] && target < nums[mid]) right = mid - 1;else left = mid + 1;}else{if(target > nums[mid] && target <= nums[right]) left = mid + 1;else right = mid - 1;}}return -1;}
}

四、200. 岛屿数量

题目链接:https://leetcode.cn/problems/number-of-islands/description/
思路:经典深度优先求岛屿数量,进入岛屿就进行DFS,然后把遍历过岛屿都改成海洋即可。

class Solution {public int numIslands(char[][] grid) {int count = 0;for(int i = 0; i < grid.length; i++) {for(int j = 0; j < grid[0].length; j++) {if(grid[i][j] == '1') {dfs(grid, i, j);count++;}}}return count;}void dfs(char[][] grid, int x, int y) {if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0') return;grid[x][y] = '0';dfs(grid, x-1, y);dfs(grid, x+1, y);dfs(grid, x, y-1);dfs(grid, x, y+1);}
}

五、20. 有效的括号

题目链接:https://leetcode.cn/problems/valid-parentheses/description/
思路:经典题目了,有三种类型的括号,然后求是否是有效括号,其实只需要如果遇到左括号就把右括号入栈即可,如果遇到右括号就与栈顶进行比较,不等即错。

class Solution {public boolean isValid(String s) {LinkedList<Character> stack = new LinkedList<>();for(int i = 0; i < s.length(); i++) {char c = s.charAt(i);if(c == '(') stack.push(')');else if(c == '[') stack.push(']');else if(c == '{') stack.push('}');else if(!stack.isEmpty() && c == stack.peek()) stack.poll();else return false;}return stack.isEmpty();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS 实现Date日期格式的本地化

为了更好的更新多语言日期的显示&#xff0c;所以希望实现日期的本地化格式显示要求&#xff0c;常规的特殊字符型格式化无法满足显示要求&#xff0c;这里整理了几种我思考实现的本地化实现功能。 通过多方查找&#xff0c;总结了实现的思路主要有如下三个方向&#xff1a; 官…

vue中的路由拦截器的作用

在Vue.js中&#xff0c;我们通常使用vue-router来处理路由。而“路由拦截器”通常指的是在路由发生变化之前&#xff0c;根据某些条件来允许或阻止路由的跳转。这通常用于用户身份验证、数据加载或其他需要在导航发生之前执行的逻辑。 在vue-router中&#xff0c;我们可以使用…

【鸿蒙 HarmonyOS】Swiper组件

一、背景 项目中通常会遇到图片轮播&#xff0c;内容轮播的场景&#xff1b;如&#xff1a;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 二、源码地址 ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/harmony-os-next-swi…

Nginx与Gateway

Nginx与Gateway Nginx 基本介绍 Nginx 是一款轻量级的高性能 Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它由俄罗斯的 Igor Sysoev 所开发&#xff0c;最初供俄罗斯大型的门户网站及搜索引擎 Rambler 使用。 Nginx 的特点在于其占用…

多种异构数据的分析设计方案2:使用策略模式+函数式接口+MAP

多种异构数据的分析设计方案2&#xff1a;聊聊策略模式函数式接口MAP 定义 策略模式(Strategy Pattern): 定义并封装一系列算法类&#xff0c;并且这些类可以相互替换&#xff0c;可以在运行时根据需要选择不同的算法&#xff0c;而不需要修改客户端流程代码。 策略模式让算法…

质量小议39 -- 要多少饺子皮

试验、总结、调整&#xff1b; 基准、标量化、定制化。 包饺子&#xff0c;1斤肉&#xff0c;要多少饺子皮。 每次要包饺子总是要问这样的问题&#xff1a;皮少了馅没得处理&#xff0c;皮多了没地方放。 有没有一个好办法&#xff1f; 1. 影响饼子皮数量的原因有…

机房运维管理中的告警管理:构建高效IT故障管理体系

随着信息技术的迅猛发展&#xff0c;机房作为IT系统的核心&#xff0c;其运维管理的重要性日益凸显。其中&#xff0c;告警管理作为机房运维的关键环节&#xff0c;为用户提供了统一的全流程故障管理体系&#xff0c;确保网络故障的快速准确发现与处理。本文将深入探讨机房运维…

gma 2.0.10 (2024.06.16) | GmaGIS V0.0.0a4 更新日志

安装 gma 2.0.10 pip install gma2.0.10网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版…

Dubbo入门与实践

Apache Dubbo是一款高性能的Java RPC框架&#xff0c;它提供了高效的服务发现和负载均衡机制。Dubbo适用于构建大规模的分布式系统&#xff0c;尤其是微服务架构。以下是Dubbo的入门指南和实践示例&#xff0c;帮助你开始使用Dubbo。 1. 环境准备 首先&#xff0c;确保你已经…

CAP和Base

CAP定理和BASE理论是分布式系统领域中两个重要的概念&#xff0c;它们分别描述了分布式系统设计中的一些基本限制和原则。 CAP定理 CAP定理&#xff0c;又称布鲁尔定理&#xff08;Brewer’s theorem&#xff09;&#xff0c;由计算机科学家埃里克布鲁尔&#xff08;Eric Bre…

oracle job

1. 定义 Job是一个可以被调度以在特定时间或按一定频率自动执行的数据库对象。Job通常用于执行预定的后台任务&#xff0c;如数据清理、统计信息更新、备份操作、数据导入导出、报告生成等。这些任务可以是任何可以在数据库环境中执行的操作&#xff0c;最常见的形式是调用存储…

AtCoder Beginner Contest 358 A~E(F,G更新中...)

A.Welcome to AtCoder Land 题意 给出两个字符串 S , T S, T S,T&#xff0c;请你判断是否满足&#xff1a; 字符串 S S S为AtCoder 字符串 T T T为Land 分析 输入后判断即可 代码 #include<bits/stdc.h> using namespace std; void solve() {string s, t;cin &g…

学习记录:VS2019+OpenCV3.4.1实现SURF库函数的调用

最近在学习opencv的使用&#xff0c;在参照书籍《OpenCV3编程入门》实现SURF时遇到不少问题&#xff0c;下面做归纳总结。 错误 LNK2019 无法解析的外部符号 “public: static struct cv::Ptr __cdecl cv::xfeatures2d::SURF::create(double,int,int,bool,bool)” (?createSUR…

51单片机实验05 -点阵

目录 一&#xff0c;熟悉矩阵led小灯 1&#xff0c;点亮矩阵的一只led 2&#xff0c;点亮矩阵的一排led 3&#xff0c;点亮矩阵的全部led static 关键字 unsigned 关键字 4&#xff0c;点阵的静态显示 2&#xff09;心形矩阵显示代码 3&#xff09;效果 二&#xff0c;课…

模仿qsort实现一个通用的冒泡排序

目录 前言 模仿 排序整型数组 排序结构体数组 排序字符数组 前言 qsort在前面我们讲到底层逻辑是快速排序的方式&#xff0c;是不是可以发现有了qsort来进行排序的话&#xff0c;就更加的方便快捷&#xff0c;我们在使用的时候 一方面&#xff0c;代码量会大大的减少 另一…

bat处理批量文件重命名

遇到需要批量重命名文件的情况&#xff0c;许多博主文章有方法介绍&#xff0c;但可行的不多。&#xff08;主要是推荐专用工具&#xff0c;但这些工具还都是要收费的。&#xff09;下面把我的办法分享下。 总体概括是使用bat文件处理。 1、生成Excle文件 2、全选要重命名的所…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟&#xff0c;全国各地的消费者通过网络在线上购物的频率越来越高&#xff0c;为此&#xff0c;多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台&#xff0c;开设自己的店铺。 图片来源&#xff1a;unspl…

Ubuntu20.04环境下Baxter机器人开发环境搭建

Ubuntu20.04环境下Baxter机器人开发环境搭建 ubuntu20.04安装 略 安装ROS 略 Baxter机器人依赖安装 主目录创建工作空间&#xff0c;按以下步骤执行 mkdir -p ~/baxter_ws/src source /opt/ros/noetic/setup.bash cd ~/baxter_ws catkin_make catkin_make install s…

oracle的json_arrayagg的用法和例子

JSON_ARRAYAGG 是 Oracle 数据库中用于将多行数据聚合为一个 JSON 数组的函数。这个函数对于将查询结果转换为 JSON 格式特别有用&#xff0c;尤其是在 RESTful API 或需要 JSON 输出的应用中。 语法 sql JSON_ARRAYAGG ( [ DISTINCT | UNIQUE ] expr [ ON NULL { NULL | AB…

【CT】LeetCode手撕—121. 买卖股票的最佳时机

目录 题目1- 思路2- 实现⭐121. 买卖股票的最佳时机——题解思路 2- ACM实现 题目 原题连接&#xff1a;121. 买卖股票的最佳时机 1- 思路 模式识别 模式1&#xff1a;只能某一天买入 ——> 买卖一次 ——> dp 一次的最大利润 动规五部曲 1.定义dp数组&#xff0c;确…