力扣刷题【20,21,26,27,35】
生活随笔
收集整理的這篇文章主要介紹了
力扣刷题【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. 搜索插入位置
總結
以上是生活随笔為你收集整理的力扣刷题【20,21,26,27,35】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Tampermonkey进行Java
- 下一篇: java 字体名字_JAVA:获取系统中