当前位置: 首页 > news >正文

回顾前面刷过的算法(8)

最近几天回顾了一下一下几道算法题目

//最长回文子串//思路: 中心扩散,先以一个元素为中心进行扩散,再以两个元素为中心进行扩散//维护两个变量,maxLength记录最长回文子串长度,maxStart记录子串的开始位置,便于截取public String longestPalindrome(String s) {int maxLength = 0, maxStart = 0;for (int j = 0; j < 2; j++) {for (int i = 0; i < s.length(); i++) {int left = i;int right = i + j;while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}left++;right--;if (maxLength < right - left + 1) {maxLength = right - left + 1;maxStart = left;}}}return s.substring(maxStart, maxLength + maxStart);}//合并两个有序链表//思路:创建一个新头结点,再定义两个指针分别去遍历两条有序链表,进行比较,//然后拼接到新头结点上public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode newHead = new ListNode(0);ListNode tail = newHead;ListNode p = l1, q = l2;while (p != null && q != null) {if (p.val >= q.val) {tail.next = q;q = q.next;} else {tail.next = p;p = p.next;}tail = tail.next;}if (p != null) {tail.next = p;} else if (q != null) {tail.next = q;}return newHead.next;}//有效括号public boolean isValid(String s) {if (s.isEmpty()) return false;Stack<Character> stack = new Stack<>();for (char c : s.toCharArray()) {if (c == '(') {stack.push(')');} else if (c == '{') {stack.push('}');} else if (c == '[') {stack.push(']');} else if (stack.isEmpty() || c != stack.pop()) {return false;}}if (stack.isEmpty()) return true;return false;}//无重复字符的最长子串//思路:定义两个变量left和right,用于指向字符串数组,每次right++//然后检查set中是否存在当前right指向的字符,存在则remove所有并且left++//接着将其add到set中去,然后维护一个res变量记录left与right指向的子串最大长度//left和right的移动类似一个滑动窗口public int lengthOfLongestSubstring(String s) {char[] ss = s.toCharArray();Set<Character> set = new HashSet<>();int res = 0;for (int left = 0, right = 0; right < s.length(); right++) {char ch = ss[right];while (set.contains(ch)) {set.remove(ss[left]);left++;}set.add(ss[right]);res = Math.max(res, right - left + 1);}return res;}//两数相加//利用map存储元素,数组值当作key,索引当作value//在遍历数组的同时判断map中是否存在目标和与当前元素的差//存在则返回两个元素的下标public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap();for (int i = 0; i < nums.length; i++) {if (map.containsKey(target - nums[i])) {return new int[] { map.getOrDefault(target - nums[i], 0), i};}map.put(nums[i], i);}return null;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java-希尔排序算法介绍、应用场景和示例代码
  • spingboot实现常规增删改查
  • erlang学习:gen_server书上案例22.6练习题4
  • jmeter通过参数文件、循环组件实现多账号登陆
  • npm install 报错解决记录
  • Golang 使用redis stream实现一个实时推送功能
  • Groupings sets详解
  • 东方银行--用 MinIO 和 Dremio 替代 Hadoop
  • React18快速入门教程
  • C HTML格式解析与生成
  • 浅谈Kafka(二)
  • EmguCV学习笔记 VB.Net 第5章 图像变换
  • 【机器学习】 1. 总览介绍
  • 开源大屏设计工具DataRoom
  • Elasticsearch:使用 ELSER 进行语义搜索 - sparse_vector
  • 【comparator, comparable】小总结
  • angular2 简述
  • Apache Pulsar 2.1 重磅发布
  • bearychat的java client
  • ComponentOne 2017 V2版本正式发布
  • eclipse的离线汉化
  • gops —— Go 程序诊断分析工具
  • Java比较器对数组,集合排序
  • java小心机(3)| 浅析finalize()
  • js ES6 求数组的交集,并集,还有差集
  • js正则,这点儿就够用了
  • mysql中InnoDB引擎中页的概念
  • Next.js之基础概念(二)
  • SpringCloud集成分布式事务LCN (一)
  • 当SetTimeout遇到了字符串
  • 手写双向链表LinkedList的几个常用功能
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 最简单的无缝轮播
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • AI算硅基生命吗,为什么?
  • scrapy中间件源码分析及常用中间件大全
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #《AI中文版》V3 第 1 章 概述
  • #Linux(权限管理)
  • #Ubuntu(修改root信息)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (web自动化测试+python)1
  • (二十四)Flask之flask-session组件
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (五)网络优化与超参数选择--九五小庞
  • *上位机的定义
  • .bat批处理出现中文乱码的情况
  • .NET DataGridView数据绑定说明
  • .net 按比例显示图片的缩略图
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化