力扣刷题【20,21,26,27,35】

-

    • 20 有效的括号
    • 21 合并两个有序链表
    • 26 删除数组中的重复项
    • 27. 移除元素
    • 35. 搜索插入位置

20 有效的括号

使用replace一直替换

package top.lel.lc.easy.valid_parentheses;import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;/*** @author echo lovely* @date 2022/1/4 09:55* @description 有效的括号*/public class ValidParentheses {/*给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses*/public static void main(String[] args) {// "(([]){})"System.out.println(checkByDeque("(([]){})"));System.out.println(checkByDeque("([0])"));}public static boolean easyDo(String s) {if (s == null || s.length() <= 0) {return false;}int len = s.length();if (len % 2 != 0) {return false;}while (s.contains("()") || s.contains("{}") || s.contains("[]")) {if (s.contains("()")) {s = s.replace("()", "");}if (s.contains("{}")) {s = s.replace("{}", "");}if (s.contains("[]")) {s = s.replace("[]", "");}}return s.length() == 0;}private static boolean checkByDeque(String s) {// "(([]){})"Deque<Character> deque = new LinkedList<>();for (char c : s.toCharArray()) {if (c == '(') {deque.push(')');} else if (c == '{') {deque.push('}');} else if (c == '[') {deque.push(']');} else if (deque.isEmpty() || c != deque.pop()) {return false;}}return deque.isEmpty();}static Map<String, String> dataMap = new HashMap<>();static {// ()[]{}dataMap.put("(", ")");dataMap.put("[", "]");dataMap.put("{", "}");}}

21 合并两个有序链表

链表preHead和头节点。操作头节点来确认链表的下一个节点。

package top.lel.lc.easy.merge_two_sorted_lists;/*** @author echo lovely* @description 合并两个有序列表为一个有序链表* <p>* https://leetcode-cn.com/problems/merge-two-sorted-lists/* 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。* @since 2022/4/11 15:01*/public class MergeTwoLists {public static void main(String[] args) {ListNode listNode = new ListNode(1, new ListNode(5));ListNode listNode2 = new ListNode(2, new ListNode(6));ListNode res = mergeTwoLists(listNode, listNode2);System.out.println(res);}public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode preHead = new ListNode(0);// 第一个节点ListNode pre = preHead;while (list1 != null && list2 != null) {if (list1.val < list2.val) {pre.next = list1;list1 = list1.next;} else {pre.next = list2;list2 = list2.next;}pre = pre.next;}if (list1 == null) {pre.next = list2;} else {pre.next = list1;}return preHead.next;}/*** Definition for singly-linked list.*/static class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}@Overridepublic String toString() {return "ListNode{" +"val=" + val +", next=" + next +'}';}}}

26 删除数组中的重复项

用了jdk的工具去重和双指针两种方式。

package top.lel.lc.easy.rm_dup_from_sorted_arr;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;/*** @author echo lovely* @description https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array* 给定一升序重复数组,去重,然后返回去重后的长度...* @since 2022/4/13 16:45*/public class RmDupFromArr {public static void main(String[] args) {int i = removeDuplicates(new int[]{1, 1, 2, 3, 4, 4, 5});System.out.println(i);int i1 = solution2(new int[]{1, 1, 2, 3, 4, 4, 5});System.out.println(i1);}public static int solution2(int[] nums) {// 使用j构造新数组int j = 0;for (int i = 0; i < nums.length; i++) {if (i == 0 || nums[i] != nums[i - 1]) {nums[j] = nums[i];j++;}}System.out.println(Arrays.toString(nums));return j;}public static int removeDuplicates(int[] nums) {List<Integer> collect = Arrays.stream(nums).distinct().boxed().collect(Collectors.toList());// nums = new int[collect.size()];for (int i = 0; i < collect.size(); i++) {nums[i] = collect.get(i);}System.out.println(Arrays.toString(nums));return collect.size();}}

27. 移除元素

双指针移除指定的元素

package top.lel.lc.easy.rm_ele;import java.util.Arrays;/*** @author echo lovely* @description* 移除给定数组中存在的元素, 并返回修改后的长度, 数组元素顺序可以改变* @since 2022/4/14 11:01*/public class RemoveElements {public static void main(String[] args) {int i = removeElement(new int[]{1, 4, 3, 2, 3, 4, 5, 4, 9}, 4);System.out.println(i);}/*** 返回数组的长度* 使用双指针覆盖...*/public static int removeElement(int[] nums, int val) {/*如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。*/// 左指针用于偏移, 要被覆盖的值int left = 0;for (int right = 0; right < nums.length; right++) {if (nums[right] != val) {nums[left] = nums[right];left++;}}System.out.println(Arrays.toString(nums));return left;}
}

35. 搜索插入位置

  1. 利用二分法求解
  2. 利用数组拷贝,先考虑数组的临界点插入,然后在数组中的进行后移拷贝。
package top.lel.lc.easy.search_insert_poi;/*** @author echo lovely* @description 找到某个元素在排序数组的位置, 如果找不到* 按顺序插入, 并返回位置* https://leetcode-cn.com/problems/search-insert-position/* @since 2022/4/14 17:13*/public class SearchInsertPosition {public static void main(String[] args) {/*int i = searchInsert(new int[]{1, 3, 5, 6}, -88);System.out.println(i);*/int upgrade = upgrade(new int[]{1, 2, 3, 5, 6, 8}, 999);System.out.println(upgrade);}// 二分法public static int upgrade(int[] nums, int target) {int left = 0;int right = nums.length;System.out.println(left + (right - left) / 2);System.out.println((left + right) / 2);while (left < right) {int mid = left + (right - left) / 2;// System.out.println("中间下标..." + mid);if (nums[mid] < target) {// [mid + 1, right]left = mid + 1;} else {// [left, mid]right = mid;}// System.out.println(String.format("left: %s, right: %s", left, right));}//System.out.println(String.format("left: %s, right: %s", left, right));return left;}public static int searchInsert(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {if (target == nums[i]) {return i;}}int res = 0;int[] arr = new int[nums.length + 1];int len = arr.length;// 拷贝一份数for (int i = 0; i < len - 1; i++) {arr[i] = nums[i];}arr[len - 1] = 0;for (int i = 0; i < len; i++) {// 1. 要找的数比数组中的数小if (target < arr[i]) {for (int j = 0; j < len - 1; j++) {arr[j + 1] = nums[j];}arr[0] = target;break;}// 2. 要找的数大于数组中的某个数if (target > arr[i] && i < len - 1 && target <= arr[i + 1]) {int insertIndex = i + 1;res = insertIndex;for (int k = insertIndex; k < len - 1; k++) {arr[k + 1] = nums[k];}arr[res] = target;break;}}// 要找的数最大if (arr[len - 1] == 0) {arr[len - 1] = target;return len - 1;}return res;}
}

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

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

相关文章

前端学习(1346):用户的增删改查操作3增加

//创建http连接 const http require(http); //创建服务器 const app http.createServer(); //第三方模块导入 const mongoose require(mongoose); //获取连接 const url require(url); // const querystring require(querystring); //数据库连接地址 mongoose.connect(mon…

【leetcode】Intersection of Two Linked Lists

Intersection of Two Linked Lists Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3begin to int…

闪电shader_【Shader案例】怎样做出自然的闪电

(本次案例的效果)最近下载了一套特效&#xff0c;其中一个关于闪电制作的shader想法特别聪明&#xff0c;这里特地附上原代码&#xff0c;并教你怎么把源代码转换成连连看&#xff0c;下面开始正文。这是原本shader定义的属性&#xff1a;_TintColor(闪电的颜色)_MainTex(一张R…

MySQL8数据恢复

binlog数据恢复恢复流程恢复流程 先登录MySQL flush log flush log这样会在MySQL binglog日志目录重新生成二进制文件 查看日志文件名 binlog.000033是我刚生成的日志&#xff0c;现在操作的是binlog.000032这个文件。相当于备份了下。 基于位置恢复&#xff08;先查看位置…

前端学习(1347):用户的增删改查操作4修改

//创建http连接 const http require(http); //创建服务器 const app http.createServer(); //第三方模块导入 const mongoose require(mongoose); //获取连接 const url require(url); // const querystring require(querystring); //数据库连接地址 mongoose.connect(mon…

前端学习(1348):用户的增删改查操作5修改

//创建http连接 const http require(http); //创建服务器 const app http.createServer(); //第三方模块导入 const mongoose require(mongoose); //获取连接 const url require(url); // const querystring require(querystring); //数据库连接地址 mongoose.connect(mon…

ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步

Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段。近期有场景需要做Oracle到Hadoop体系的实时导入&#xff0c;这里以此案例做以介绍。Oracle作为商业化的数据库解决方案&#xff0c;自发性的获取数据库事务日志等比较困难&#xff0c;故选择官方提…

50个jQuery代码段帮你成为更出色的JS开发者

http://www.jqdemo.com/525.html转载于:https://www.cnblogs.com/iqiao/p/4255515.html

parallelStream与stream

并行流&#x1f36d; 多线程并发&#x1f36d; 多线程并发 &#x1f355;stream与parallelStream 下面的代码分别用了parallelStream与stream进行迭代。获取对应的每一项值&#xff0c;和对应的线程名称。 package top.lel.jvm.sdk.stream;import java.util.List; import jav…

前端学习(1349):用户的增删改查操作6删除

//创建http连接 const http require(http); //创建服务器 const app http.createServer(); //第三方模块导入 const mongoose require(mongoose); //获取连接 const url require(url); // const querystring require(querystring); //数据库连接地址 mongoose.connect(mon…

力扣刷题【94,100,101,104】

binary tree&#x1f384;树的数据结构 // Definition for a binary tree node. public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) {this.val val;}TreeNode(int val, TreeNode left, TreeNode right) {this.val val;th…

Java, C#, Swift语法对比速查表

Java 8C# 6Swift变量类型 变量名;类型 变量名;var 变量名 : 类型;变量&#xff08;类型推断&#xff09;N/Avar 变量名初值;var 变量名初值;常量final 类型 常量名初值;readonly 类型 常量名初值;let 常量名 : 类型初值;基本类型 int short long byte double float boolean cha…

0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程

中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程。所谓bond&#xff0c;就是把多个物理网卡绑定成一个逻辑网卡&#xff0c;使用同一个IP工作&#xff0c;在增加带宽的同时也可以提高冗余性&#xff0c;一般使用较多的就是来提高冗余&#xff0c;分别和不同交换机相连…

前端学习(1350):用户的增删改查操作7增删改查

demo25.js //创建http连接 const http require(http); //创建服务器 const app http.createServer(); //第三方模块导入 /* const mongoose require(mongoose); */ //获取连接 const url require(url); // const querystring require(querystring);require(./demo26.js);…

基于aop的日志记录

aop实现日志记录记录工具切面logback配置测试记录工具 目标&#xff1a; 统计rest接口请求参数&#xff0c;请求地址&#xff0c;请求IP&#xff0c;响应数据&#xff0c;响应时间。方便后续问题排查&#xff0c;以及性能的总体分析。 基于springboot会使用面向切面编程基于l…

xss防御补丁_Discuz论坛最新dom xss漏洞的解决方法

无忧主机小编在日常处理客户网站问题时&#xff0c;经常遇到网站因为程序漏洞出现的问题。网站安全的发展&#xff0c;才能使得管理者放心营运。但是比较无奈的是&#xff0c;漏洞问题貌似屡见不鲜&#xff0c;就算再强大、再常用的程序&#xff0c;都会有诸如漏洞的问题&#…

前端学习(1351)模板引擎

const template require(art-template); //绝对路径 模板中显示的数据 const path require(path); const views path.join(__dirname, index.art); const html template(views, {name: 张三,age: 20 }); console.log(html); index.art <!DOCTYPE html> <html la…

内存数据库和关系数据库之间的数据同步原理

关系数据库到内存数据库同步这部分数据同步采用增量表的方式&#xff0c;系统新增或更新的数据将生成到关系数据库的增量表中&#xff0c;程序先到这些增量表中查询数据。如果能在这些增量表中查到数据就把这些数据更新到内存数据库对应表中&#xff0c;如果查不到&#xff0c;…

java 图片压缩100k_java实现图片压缩

简介我们在项目中经常会遇到图片上传的需求&#xff0c;如商品图片&#xff0c;但图片太大的话&#xff0c;在客户端加载太慢影响用户体验&#xff0c;所有一般会将图片进行压缩。实现原图添加依赖net.coobirdthumbnailator0.4.8按质量压缩import java.io.File;import java.io.…

前端学习(1352)模板语法

demo27.js const template require(art-template); //绝对路径 模板中显示的数据 const path require(path); const views path.join(__dirname, 01.art); const html template(views, {name: 张三,age: 20,content: <h1>我是歌谣</h1> }); console.log(html)…