diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode15.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode15.java new file mode 100644 index 0000000..c98b1a6 --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode15.java @@ -0,0 +1,58 @@ +package cn.whaifree.redo.redo_all_240721; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/23 22:46 + * @注释 + */ +public class LeetCode15 { + public static void main(String[] args) { + int[] nums = new int[]{-1, 0, 1, 2, -1, -4}; + System.out.println(threeSum(nums)); + + System.out.println(threeSum(new int[]{1,2,1})); + } + + public static List> threeSum(int[] nums) { + int len = nums.length; + ArrayList> res = new ArrayList<>(); + if (len < 3) { + return res; + } + Arrays.sort(nums); + + + for (int left = 0; left < len - 2; left++) { + int mid = left + 1; + int right = len - 1; + if (left > 0 && nums[left] == nums[left - 1]) { + break; + } + while (mid < right) { + int sum = nums[left] + nums[mid] + nums[right]; + if (sum == 0) { + res.add(Arrays.asList(nums[left], nums[mid], nums[right])); + while (mid < right && nums[mid] == nums[mid + 1]) { + mid++; + } + while (mid < right && nums[right] == nums[right - 1]) { + right--; + } + // 如果有重复的,必然要跳过 + mid++; + right--; + } else if (sum > 0) { + right--; + } else { + mid++; + } + } + } + return res; + } +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode202.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode202.java new file mode 100644 index 0000000..3660e81 --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode202.java @@ -0,0 +1,46 @@ +package cn.whaifree.redo.redo_all_240721; + +import java.util.HashSet; +import java.util.Set; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/22 23:18 + * @注释 + */ +public class LeetCode202 { + public static void main(String[] args) + { + int n = 2; + System.out.println(isHappy(n)); + System.out.println(isHappy(19)); + } + + /** + * 2 4 16 1+36=37 9+47=56 25+36=61 36+1=37 + * @param n + * @return + */ + public static boolean isHappy(int n) + { + Set set = new HashSet<>(); + + while (n != 1) { + int tmpSum = 0; + while (n > 0) { + int retail = n % 10; + tmpSum += retail * retail; + n /= 10; + } + if (set.contains(tmpSum)) { + return false; + } + set.add(tmpSum); + n = tmpSum; + } + return true; + + + } +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode206.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode206.java new file mode 100644 index 0000000..7cb0491 --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode206.java @@ -0,0 +1,43 @@ +package cn.whaifree.redo.redo_all_240721; + +import cn.whaifree.leetCode.model.ListNode; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/22 22:56 + * @注释 + */ +public class LeetCode206 { + public static void main(String[] args) + { + ListNode listNode = ListNode.listNodeFromArray(new int[]{1, 2, 3, 4, 5}); + ListNode.printList(reverseList(listNode)); + + } + + /** + * 递归 + * @param head + * @return + */ + public static ListNode reverseList(ListNode head) + { + return reverse(null, head); + } + + /** + * a b c d + * @param pre + * @param after + * @return + */ + public static ListNode reverse(ListNode pre, ListNode after) { + if (after == null) { + return pre; + } + ListNode tmp = after.next; + after.next = pre; + return reverse(after, tmp); + } +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode225.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode225.java new file mode 100644 index 0000000..bece539 --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode225.java @@ -0,0 +1,67 @@ +package cn.whaifree.redo.redo_all_240721; + +import java.util.Deque; +import java.util.LinkedList; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/23 23:43 + * @注释 + */ +public class LeetCode225 { + public static void main(String[] args) + { + MyStack myStack = new MyStack(); + myStack.push(1); + myStack.push(2); + System.out.println(myStack.top()); + System.out.println(myStack.pop()); + System.out.println(myStack.empty()); + System.out.println(myStack.pop()); + System.out.println(myStack.empty()); + } + + static class MyStack { + + Deque q1; + Deque q2; + + public MyStack() { + q1 = new LinkedList(); + q2 = new LinkedList(); + } + + public void push(int x) { + q1.add(x); + } + + public int pop() { + while (q1.size() > 1) { + q2.add(q1.pop()); + } + int tmp = q1.pop(); + while (!q2.isEmpty()) { + q1.add(q2.pop()); + } + return tmp; + } + + public int top() { + while (q1.size() > 1) { + q2.add(q1.pop()); + } + int tmp = q1.pop(); + q2.add(tmp); + while (!q2.isEmpty()) { + q1.add(q2.pop()); + } + return tmp; + } + + public boolean empty() { + return q1.isEmpty(); + } + } + +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode2487.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode2487.java new file mode 100644 index 0000000..534123e --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode2487.java @@ -0,0 +1,49 @@ +package cn.whaifree.redo.redo_all_240721; + +import cn.whaifree.leetCode.model.ListNode; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/23 23:09 + * @注释 + */ +public class LeetCode2487 { + public static void main(String[] args) { + ListNode listNode = ListNode.listNodeFromArray(new int[]{99, 2, 13, 3, 8}); + removeNodes(listNode).printList(); + } + + public static ListNode removeNodes(ListNode head) { + head = reverseList(new ListNode(-1, head)); + ListNode index = head; + while (index.next != null) { + if (index.val > index.next.val) { + index.next = index.next.next; + continue; + } + index = index.next; + } + return reverseList(head); + } + + public static ListNode reverseList(ListNode head) { + return reverse(null, head); + } + + /** + * a b c + * @param pre + * @param after + * @return + */ + public static ListNode reverse(ListNode pre, ListNode after) { + if (after == null) { + return pre; + } + ListNode tmp = after.next; + after.next = pre; + return reverse(after, tmp); + } + +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode28.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode28.java new file mode 100644 index 0000000..5d5e9d5 --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode28.java @@ -0,0 +1,29 @@ +package cn.whaifree.redo.redo_all_240721; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/23 23:37 + * @注释 + */ +public class LeetCode28 { + public static void main(String[] args) + { + String haystack = "hello"; + String needle = "ll"; + System.out.println(strStr(haystack, needle)); + System.out.println(strStr("a", "a")); + System.out.println(strStr("mississippi", "issip")); + } + public static int strStr(String haystack, String needle) + { + int len = needle.length(); + for (int i = 0; i <= haystack.length() - len; i++) { + String substring = haystack.substring(i, i + len); + if (substring.equals(needle)) { + return i; + } + } + return -1; + } +} diff --git a/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode287.java b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode287.java new file mode 100644 index 0000000..7d81eee --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_all_240721/LeetCode287.java @@ -0,0 +1,52 @@ +package cn.whaifree.redo.redo_all_240721; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/7/22 23:12 + * @注释 + */ +public class LeetCode287 +{ + public static void main(String[] args) + { + int[] nums = {3,1,3,4,2}; + System.out.println(findDuplicate(nums)); + int[] nums2 = {1,3,4,2,2}; + System.out.println(findDuplicate(nums2)); + int[] nums3 = {1,1}; + System.out.println(findDuplicate(nums3)); + } + + /** + * 包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n) + * + * 3,1,3,4,2 + * 0 1 2 3 4 + * + * fast = nums[nums[fast]] + * slow = nums[slow] + * + * + * @param nums + * @return + */ + public static int findDuplicate(int[] nums) + { + // 快慢指针 + int fast = 0; + int slow = 0; + do { + fast = nums[nums[fast]]; + slow = nums[slow]; + } while (slow != fast); + + fast = 0; + + while (fast != slow) { + fast = nums[fast]; + slow = nums[slow]; + } + return slow; + } +}