-

  • 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;}
}

力扣刷题【20,21,26,27,35】相关推荐

  1. 字符串第二大的数字——力扣刷题2021.9.26

    原题链接 细节问题 注意当判断值与第一大值相等时的特殊情况 代码 public class Solution {public int secondHighest (String s) {if(s == ...

  2. 力扣刷题笔记--168. Excel表列名称

    题目描述: 简单题 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称. 例如: A -> 1 B -> 2 C -> 3 ... Z -> 2 ...

  3. 《剑指Offer》力扣刷题笔记(03-10)

    <剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...

  4. 力扣刷题记录--哈希表相关题目

    当遇到需要快速判断一个元素是否出现在集合里面的时候,可以考虑哈希法,牺牲一定的空间换取查找的时间. java常用的哈希表有HashMap.HashSet以及用数组去模拟哈希,这几种方法各有优劣. 数组 ...

  5. 力扣刷题学习SQL篇——1-8 查询(按日期分组销售产品——利用聚合函数GROUP_CONCAT)

    力扣刷题学习SQL篇--1-8 查询(按日期分组销售产品--利用聚合函数GROUP_CONCAT) 1.题目 2.解法 3.group_concat() 1.题目 题目链接:https://leetc ...

  6. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  7. 力扣刷题之二叉树的层序遍历

                                                      Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...

  8. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  9. 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...

  10. 『力扣刷题』5238_找出给定方程的正整数解 解题代码

    html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...

最新文章

  1. 学习练习SQL的数据库employee文件
  2. 运行hadoop自带的wordcount例子
  3. pdf压缩工具_PDF文件过大如何缩小,几步教你完成压缩
  4. jquery判断多选框是否选中
  5. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路
  6. kafka 启动_Kafka的安装与启动
  7. java基础思维导图
  8. i=i+1,i+=1与i++的区别
  9. 计算机学科专业基础综合961,2017年北京航空航天大学计算机学院961计算机学科专业基础综合之数据结构考研强化模拟题...
  10. SQLSERVER查询数据库所有表名及行数
  11. RK3399平台开发系列讲解(内核驱动外设篇)6.8、视频解码芯片GM7150驱动的添加
  12. 中国运营商IP范围 路由表
  13. java多线程问题(代码示例)
  14. springboot 入门详细教程 源码
  15. 服务器gpu卡型号V100,NVIDIA GPU服务器升级:16块450W Tesla V100
  16. oracle如何设置连接数,关于Oracle连接数设置
  17. Principles of fMRI 1课程笔记7--fMRI数据的时间分辨率和空间分辨率
  18. [git报错] fatal: reference is not a tree: xxx 以及 Unable to checkout ‘xxx‘ in submodule path xxx
  19. IPv4的三种寻址方式(分类寻址,子网寻址到最新的CIDR寻址)
  20. css 的垂直居中和 图片居中

热门文章

  1. oracle之单行函数之子查询课后练习2
  2. 前端学习(508):水平和垂直居中第一种方式
  3. 前端学习(168)全局事件属性
  4. 31.javaweb简介
  5. java学习(168):java连接SQL server数据库
  6. java学习(5):全局变量和局部变量
  7. A Quantization-Friendly Separable Convolution for MobileNets
  8. teststand调用python模块_TestStand 基本知识[10]--在序列中调用代码模块之--LabVIEW
  9. Java面向对象---重写(Override)与重载(Overload)
  10. (Oracle)关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案...