leecode更新

This commit is contained in:
markilue 2023-03-19 13:56:17 +08:00
parent cb04a53dbc
commit a4334c4a16
9 changed files with 321 additions and 5 deletions

View File

@ -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 <nums.length ; i++) {
nums[i]=0;
}
}
}

View File

@ -0,0 +1,100 @@
package com.markilue.leecode.hot100;
import org.junit.Test;
/**
*@BelongsProject: Leecode
*@BelongsPackage: com.markilue.leecode.hot100
*@Author: markilue
*@CreateTime: 2023-03-19 11:32
*@Description:
* TODO 力扣287 寻找重复数:
* 给定一个包含 n + 1 个整数的数组 nums 其数字都在 [1, n] 范围内包括 1 n可知至少存在一个重复的整数
* 假设 nums 只有 一个重复的整数 返回 这个重复的数
* 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间
*@Version: 1.0
*/
public class T76_FindDuplicate {
@Test
public void test() {
int[] nums = {1, 3, 4, 2, 2};
System.out.println(findDuplicate2(nums));
}
/**
* 因为数字都在1-n之间所以总和是一定的
* 使用总和减去现在的总和就可以知道差值
* 不对:一个整数不是一定出现两次可能出现多次
* @param nums
* @return
*/
public int findDuplicate(int[] nums) {
int totalSum = 0;
int curSum = 0;
for (int i = 0; i < nums.length; i++) {
totalSum += (i + 1);
curSum += nums[i];
}
return nums.length - (totalSum - curSum);
}
/**
* 官方二分查找法:注意这里是mid,不是nums[mid]奇特的地方就在于如果一个数有重复的数的话那么小于这个数的count一定>它本身
* 时间复杂度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;
}
}

View File

@ -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<TreeNode> 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<TreeNode> childList) {
this.value = value;
this.childList = childList;
}
}

View File

@ -1,4 +1,5 @@
package meituan;
package com.markilue.interview;
import org.junit.Test;

View File

@ -1,4 +1,4 @@
package meituan;
package com.markilue.interview;
import org.junit.Test;

View File

@ -1,4 +1,4 @@
package meituan;
package com.markilue.interview;
import org.junit.Test;

View File

@ -1,4 +1,4 @@
package meituan;
package com.markilue.interview;
import java.util.Arrays;
import java.util.Scanner;

View File

@ -1,4 +1,4 @@
package meituan;
package com.markilue.interview;
import java.util.ArrayList;

37
interview/MiHayo/pom.xml Normal file
View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.markilue.interview</groupId>
<artifactId>MiHayo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>