日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣刷题【20,21,26,27,35】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

-

    • 20 有效的括號(hào)
    • 21 合并兩個(gè)有序鏈表
    • 26 刪除數(shù)組中的重復(fù)項(xiàng)
    • 27. 移除元素
    • 35. 搜索插入位置

20 有效的括號(hào)

使用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 有效的括號(hào)*/public class ValidParentheses {/*給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。有效字符串需滿足:左括號(hào)必須用相同類型的右括號(hào)閉合。左括號(hào)必須以正確的順序閉合。來(lái)源:力扣(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 合并兩個(gè)有序鏈表

鏈表preHead和頭節(jié)點(diǎn)。操作頭節(jié)點(diǎn)來(lái)確認(rèn)鏈表的下一個(gè)節(jié)點(diǎn)。

package top.lel.lc.easy.merge_two_sorted_lists;/*** @author echo lovely* @description 合并兩個(gè)有序列表為一個(gè)有序鏈表* <p>* https://leetcode-cn.com/problems/merge-two-sorted-lists/* 將兩個(gè)升序鏈表合并為一個(gè)新的 升序 鏈表并返回。新鏈表是通過(guò)拼接給定的兩個(gè)鏈表的所有節(jié)點(diǎn)組成的。* @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);// 第一個(gè)節(jié)點(diǎn)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 刪除數(shù)組中的重復(fù)項(xiàng)

用了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* 給定一升序重復(fù)數(shù)組,去重,然后返回去重后的長(zhǎng)度...* @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構(gòu)造新數(shù)組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* 移除給定數(shù)組中存在的元素, 并返回修改后的長(zhǎng)度, 數(shù)組元素順序可以改變* @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);}/*** 返回?cái)?shù)組的長(zhǎng)度* 使用雙指針覆蓋...*/public static int removeElement(int[] nums, int val) {/*如果右指針指向的元素不等于 val,它一定是輸出數(shù)組的一個(gè)元素,我們就將右指針指向的元素復(fù)制到左指針位置,然后將左右指針同時(shí)右移;如果右指針指向的元素等于 val,它不能在輸出數(shù)組里,此時(shí)左指針不動(dòng),右指針右移一位。*/// 左指針用于偏移, 要被覆蓋的值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. 搜索插入位置

  • 利用二分法求解
  • 利用數(shù)組拷貝,先考慮數(shù)組的臨界點(diǎn)插入,然后在數(shù)組中的進(jìn)行后移拷貝。
  • package top.lel.lc.easy.search_insert_poi;/*** @author echo lovely* @description 找到某個(gè)元素在排序數(shù)組的位置, 如果找不到* 按順序插入, 并返回位置* 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("中間下標(biāo)..." + 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;// 拷貝一份數(shù)for (int i = 0; i < len - 1; i++) {arr[i] = nums[i];}arr[len - 1] = 0;for (int i = 0; i < len; i++) {// 1. 要找的數(shù)比數(shù)組中的數(shù)小if (target < arr[i]) {for (int j = 0; j < len - 1; j++) {arr[j + 1] = nums[j];}arr[0] = target;break;}// 2. 要找的數(shù)大于數(shù)組中的某個(gè)數(shù)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;}}// 要找的數(shù)最大if (arr[len - 1] == 0) {arr[len - 1] = target;return len - 1;}return res;} }

    總結(jié)

    以上是生活随笔為你收集整理的力扣刷题【20,21,26,27,35】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。