diff --git a/Leecode/src/main/java/com/markilue/leecode/hot100/T75_MoveZeroes.java b/Leecode/src/main/java/com/markilue/leecode/hot100/T75_MoveZeroes.java new file mode 100644 index 0000000..2249119 --- /dev/null +++ b/Leecode/src/main/java/com/markilue/leecode/hot100/T75_MoveZeroes.java @@ -0,0 +1,107 @@ +package com.markilue.leecode.hot100; + +import org.junit.Test; + +import java.util.Arrays; + +/** + *@BelongsProject: Leecode + *@BelongsPackage: com.markilue.leecode.hot100 + *@Author: markilue + *@CreateTime: 2023-03-19 11:05 + *@Description: + * TODO 力扣283题 移动零: + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 + *@Version: 1.0 + */ +public class T75_MoveZeroes { + + @Test + public void test() { + int[] nums = {0, 1, 0, 3, 12}; + moveZeroes1(nums); + System.out.println(Arrays.toString(nums)); + } + + @Test + public void test1() { + int[] nums = {1, 0, 1}; + moveZeroes(nums); + System.out.println(Arrays.toString(nums)); + } + + + /** + * 思路:双指针 + * 速度击败32.68% 内存击败25.8% 2ms + * @param nums + */ + public void moveZeroes(int[] nums) { + + int left = 0;//找零的 + int right = 0;//找不是零的 + + while (left < nums.length && right < nums.length) { + while (left < nums.length && nums[left] != 0) { + left++; + } + + while (right < nums.length && nums[right] == 0) { + right++; + } + + if (right < nums.length && left < right) { + swap(nums, left, right); + } else if (left > right) { + right = left + 1; + } + + } + + } + + public void swap(int[] nums, int left, int right) { + int temp = nums[left]; + nums[left] = nums[right]; + nums[right] = temp; + } + + + /** + * 官方解答: + * 速度击败32.68% 内存击败72.91% 2ms + * @param nums + */ + public void moveZeroes1(int[] nums) { + int n = nums.length, left = 0, right = 0; + while (right < n) { + if (nums[right] != 0) { + swap(nums, left, right); + left++; + } + right++; + } + } + + + /** + * 官方最快:直接赋值,不用交换 + * 速度击败100% 内存击败24.58% 1ms + * @param nums + */ + public void moveZeroes2(int[] nums) { + int index=0; + for (int i = 0; i < nums.length; i++) { + if(nums[i]!=0){ + nums[index++]=nums[i]; + } + + } + //index后面的全是0 + for (int i =index; i 它本身 + * 时间复杂度O(nlogn) + * 速度击败15.73% 内存击败39.73% 28ms + * @param nums + * @return + */ + public int findDuplicate1(int[] nums) { + + int n = nums.length; + int l = 1, r = n - 1, ans = -1; + while (l <= r) { + int mid = (l + r) >> 1; + int cnt = 0; + for (int i = 0; i < n; ++i) { + if (nums[i] <= mid) { + cnt++; + } + } + if (cnt <= mid) { + l = mid + 1; + } else { + r = mid - 1; + ans = mid; + } + } + return ans; + + } + + + /** + * 快慢指针: 类似于监测环 + * 如果有重复,那么一定会成环,有环则一定会来回跳直至相遇 + * 时间复杂度O(N) + * 速度击败92.87% 内存击败67.52% 4ms + * @param nums + * @return + */ + public int findDuplicate2(int[] nums) { + int slow = 0, fast = 0; + do { + slow = nums[slow];//走一步 + fast = nums[nums[fast]];//走两步 + } while (slow != fast); + slow = 0; + while (slow != fast) { + slow = nums[slow]; + fast = nums[fast]; + } + return slow; + } + + +} diff --git a/Leecode/src/main/java/com/markilue/leecode/test/testMeiTuan.java b/Leecode/src/main/java/com/markilue/leecode/test/testMeiTuan.java new file mode 100644 index 0000000..ebafe92 --- /dev/null +++ b/Leecode/src/main/java/com/markilue/leecode/test/testMeiTuan.java @@ -0,0 +1,71 @@ +package com.markilue.leecode.test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +/** + *@BelongsProject: Leecode + *@BelongsPackage: com.markilue.leecode.test + *@Author: markilue + *@CreateTime: 2023-03-19 13:45 + *@Description: TODO 尝试树形DP:构造一颗子树 + *@Version: 1.0 + */ +public class testMeiTuan { + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + int num = sc.nextInt(); + int[] energies = new int[num]; + + for (int i = 0; i < num; i++) { + energies[i] = sc.nextInt(); + } + + TreeNode[] nodeList = new TreeNode[num + 1]; + + for (int i = 0; i < num; i++) { + int i1 = sc.nextInt(); + nodeList[i1] = new TreeNode(i1, energies[i]); + } + + for (int i = 0; i < num - 1; i++) { + int v1 = sc.nextInt(); + int v2 = sc.nextInt(); + nodeList[v1].childList.add(nodeList[v2]); + nodeList[v2].childList.add(nodeList[v1]); + } + + System.out.println(nodeList); + + } +} + + +class TreeNode { + + + int value; + int energe; + List childList = new ArrayList<>();//构造一个子树的子节点 + + public TreeNode() { + } + + public TreeNode(int value) { + this.value = value; + } + + public TreeNode(int value, int energe) { + this.value = value; + this.energe = energe; + } + + public TreeNode(int value, List childList) { + this.value = value; + this.childList = childList; + } + +} diff --git a/Leecode/src/test/java/meituan/Question1.java b/interview/MeiTuan/src/main/java/com/markilue/interview/Question1.java similarity index 98% rename from Leecode/src/test/java/meituan/Question1.java rename to interview/MeiTuan/src/main/java/com/markilue/interview/Question1.java index 7cf9ca7..33fdf65 100644 --- a/Leecode/src/test/java/meituan/Question1.java +++ b/interview/MeiTuan/src/main/java/com/markilue/interview/Question1.java @@ -1,4 +1,5 @@ -package meituan; +package com.markilue.interview; + import org.junit.Test; diff --git a/Leecode/src/test/java/meituan/Question2.java b/interview/MeiTuan/src/main/java/com/markilue/interview/Question2.java similarity index 98% rename from Leecode/src/test/java/meituan/Question2.java rename to interview/MeiTuan/src/main/java/com/markilue/interview/Question2.java index 9ae8b9a..fa408ec 100644 --- a/Leecode/src/test/java/meituan/Question2.java +++ b/interview/MeiTuan/src/main/java/com/markilue/interview/Question2.java @@ -1,4 +1,4 @@ -package meituan; +package com.markilue.interview; import org.junit.Test; diff --git a/Leecode/src/test/java/meituan/Question3.java b/interview/MeiTuan/src/main/java/com/markilue/interview/Question3.java similarity index 98% rename from Leecode/src/test/java/meituan/Question3.java rename to interview/MeiTuan/src/main/java/com/markilue/interview/Question3.java index 54a80bf..792b764 100644 --- a/Leecode/src/test/java/meituan/Question3.java +++ b/interview/MeiTuan/src/main/java/com/markilue/interview/Question3.java @@ -1,4 +1,4 @@ -package meituan; +package com.markilue.interview; import org.junit.Test; diff --git a/Leecode/src/test/java/meituan/Question4.java b/interview/MeiTuan/src/main/java/com/markilue/interview/Question4.java similarity index 97% rename from Leecode/src/test/java/meituan/Question4.java rename to interview/MeiTuan/src/main/java/com/markilue/interview/Question4.java index 3fa84b3..b5f29ba 100644 --- a/Leecode/src/test/java/meituan/Question4.java +++ b/interview/MeiTuan/src/main/java/com/markilue/interview/Question4.java @@ -1,4 +1,4 @@ -package meituan; +package com.markilue.interview; import java.util.Arrays; import java.util.Scanner; diff --git a/Leecode/src/test/java/meituan/Question5.java b/interview/MeiTuan/src/main/java/com/markilue/interview/Question5.java similarity index 98% rename from Leecode/src/test/java/meituan/Question5.java rename to interview/MeiTuan/src/main/java/com/markilue/interview/Question5.java index cf0e1fa..5df5ab9 100644 --- a/Leecode/src/test/java/meituan/Question5.java +++ b/interview/MeiTuan/src/main/java/com/markilue/interview/Question5.java @@ -1,4 +1,4 @@ -package meituan; +package com.markilue.interview; import java.util.ArrayList; diff --git a/interview/MiHayo/pom.xml b/interview/MiHayo/pom.xml new file mode 100644 index 0000000..405b16d --- /dev/null +++ b/interview/MiHayo/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.markilue.interview + MiHayo + 1.0-SNAPSHOT + + + 8 + 8 + + + + + junit + junit + 4.13.2 + test + + + junit + junit + 4.13.2 + compile + + + org.projectlombok + lombok + RELEASE + compile + + + + \ No newline at end of file