贪心
This commit is contained in:
parent
b8be07776c
commit
e918f47cca
44
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode322.java
Normal file
44
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode322.java
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package cn.whaifree.leetCode.Greedy;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/2/25 22:21
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode322 {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
System.out.println(new Solution().maxProfit(new int[]{7, 1, 5, 3, 6, 4}));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 随时可以买卖,那么只要有跌的我都不要。
|
||||||
|
* 上帝视角:只要涨我就全要
|
||||||
|
*
|
||||||
|
* 7跌 1涨5 跌 4涨6 跌4
|
||||||
|
*
|
||||||
|
* @param prices
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int maxProfit(int[] prices) {
|
||||||
|
|
||||||
|
int maxProfit = 0;
|
||||||
|
for (int i = 0; i < prices.length; i++) {
|
||||||
|
if (i > 0 && prices[i] - prices[i - 1] > 0) {
|
||||||
|
maxProfit += prices[i] - prices[i - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxProfit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO 动态规划
|
||||||
|
}
|
||||||
|
}
|
45
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode376.java
Normal file
45
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode376.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package cn.whaifree.leetCode.Greedy;
|
||||||
|
|
||||||
|
import jdk.internal.instrumentation.InstrumentationTarget;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/2/24 13:23
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode376 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
// System.out.println(new Solution().wiggleMaxLength(new int[]{1, 7, 4, 9, 2, 5}));
|
||||||
|
System.out.println("========");
|
||||||
|
System.out.println(new Solution().wiggleMaxLength(new int[]{1,17,5,10,13,15,10,5,16,8}));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int wiggleMaxLength(int[] nums) {
|
||||||
|
if (nums.length <= 1) {
|
||||||
|
return nums.length;
|
||||||
|
}
|
||||||
|
//当前差值
|
||||||
|
int curDiff = 0;
|
||||||
|
//上一个差值
|
||||||
|
int preDiff = 0;
|
||||||
|
int count = 1;
|
||||||
|
for (int i = 1; i < nums.length; i++) {
|
||||||
|
//得到当前差值
|
||||||
|
curDiff = nums[i] - nums[i - 1];
|
||||||
|
//如果当前差值和上一个差值为一正一负
|
||||||
|
//等于0的情况表示初始时的preDiff
|
||||||
|
if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
|
||||||
|
count++;
|
||||||
|
preDiff = curDiff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode455.java
Normal file
59
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode455.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package cn.whaifree.leetCode.Greedy;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/2/24 13:04
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode455 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
System.out.println(new Solution().findContentChildren(new int[]{1, 2, 3,1}, new int[]{2,3,1}));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param g 孩子的胃口
|
||||||
|
* @param s 饼干
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int findContentChildren(int[] g, int[] s) {
|
||||||
|
// 找到g中最大的,分配s中最大的看看是否满足
|
||||||
|
Arrays.sort(g);
|
||||||
|
Arrays.sort(s);
|
||||||
|
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
|
||||||
|
int gIndex = g.length-1;
|
||||||
|
int sIndex = s.length - 1;
|
||||||
|
while (sIndex >= 0 && gIndex >= 0) {
|
||||||
|
|
||||||
|
// 饼干可以分配,就让两个指针--
|
||||||
|
if (s[sIndex] >= g[gIndex]) {
|
||||||
|
res++;
|
||||||
|
sIndex--;
|
||||||
|
gIndex--;
|
||||||
|
} else {
|
||||||
|
// 饼干不能分配,就分配给更小的孩子
|
||||||
|
gIndex--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
48
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode53.java
Normal file
48
src/main/java/cn/whaifree/leetCode/Greedy/LeetCode53.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package cn.whaifree.leetCode.Greedy;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.concurrent.locks.Condition;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/2/25 10:53
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode53 {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
System.out.println(new LeetCode53().new Solution().maxSubArray(new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4}));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* 遇到加上变为负数,重新从0计算。
|
||||||
|
* 因为前面那一串会拖累后面那串
|
||||||
|
* @param nums
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int maxSubArray(int[] nums) {
|
||||||
|
int maxSum = Integer.MIN_VALUE;
|
||||||
|
int sum = 0;
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
// 加上某个数后是否会变为负数,会则直接从0开始计算,因为其只会拖累后面的串
|
||||||
|
sum += nums[i];
|
||||||
|
maxSum = Math.max(sum, maxSum);
|
||||||
|
if (sum < 0) {
|
||||||
|
sum = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return maxSum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
package cn.whaifree.leetCode;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
|
||||||
*
|
|
||||||
* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
|
|
||||||
*
|
|
||||||
* 你可以按任意顺序返回答案。
|
|
||||||
*
|
|
||||||
* 来源:力扣(LeetCode)
|
|
||||||
* 链接:https://leetcode.cn/problems/two-sum
|
|
||||||
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 输入:nums = [2,7,11,15], target = 9
|
|
||||||
* 输出:[0,1]
|
|
||||||
* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author whaifree
|
|
||||||
* @package cn.whaifree.leetCode
|
|
||||||
* @Date: 2022/9/13 20:54
|
|
||||||
*/
|
|
||||||
public class LeetCode001 {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* map存储,key为nums内的值,value为下标
|
|
||||||
* @param nums
|
|
||||||
* @param target
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public int[] twoSum(int[] nums, int target) {
|
|
||||||
|
|
||||||
Map<Integer, Integer> map = new HashMap<>();
|
|
||||||
int key;
|
|
||||||
for (int i = 0; i < nums.length; i++) {
|
|
||||||
//如果包含匹配的元素即输出下标
|
|
||||||
|
|
||||||
key = target - nums[i];
|
|
||||||
if (map.containsKey(key)){
|
|
||||||
return new int[]{map.get(key),i};
|
|
||||||
}else {
|
|
||||||
map.put(nums[i],i);
|
|
||||||
}
|
|
||||||
//不包含匹配的元素则增加到map中
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
int[] ints = new LeetCode001().twoSum(new int[]{2, 7, 11, 15}, 13);
|
|
||||||
for (int anInt : ints) {
|
|
||||||
System.out.println(anInt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
76
src/main/java/cn/whaifree/leetCode/Test.java
Normal file
76
src/main/java/cn/whaifree/leetCode/Test.java
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package cn.whaifree.leetCode;
|
||||||
|
|
||||||
|
import cn.whaifree.leetCode.Tree.LeetCode94;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.PriorityQueue;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
||||||
|
*
|
||||||
|
* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
|
||||||
|
*
|
||||||
|
* 你可以按任意顺序返回答案。
|
||||||
|
*
|
||||||
|
* 来源:力扣(LeetCode)
|
||||||
|
* 链接:https://leetcode.cn/problems/two-sum
|
||||||
|
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 输入:nums = [2,7,11,15], target = 9
|
||||||
|
* 输出:[0,1]
|
||||||
|
* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author whaifree
|
||||||
|
* @package cn.whaifree.leetCode
|
||||||
|
* @Date: 2022/9/13 20:54
|
||||||
|
*/
|
||||||
|
public class Test {
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
|
num = 20;
|
||||||
|
// 防止在初始化前程序中访问默认值
|
||||||
|
}
|
||||||
|
private static int num = 10;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
|
||||||
|
System.out.println(systemClassLoader);
|
||||||
|
|
||||||
|
ClassLoader extClassLoader = systemClassLoader.getParent();
|
||||||
|
System.out.println(extClassLoader);
|
||||||
|
|
||||||
|
// 获取不到引导类类加载器
|
||||||
|
ClassLoader bootClassLoader = extClassLoader.getParent();
|
||||||
|
System.out.println(bootClassLoader);
|
||||||
|
|
||||||
|
ClassLoader classLoader = Test.class.getClassLoader();
|
||||||
|
System.out.println(classLoader);
|
||||||
|
|
||||||
|
|
||||||
|
// 系统核心类库都是使用引导类(BootStrapClassLoader)进行加载,都为null
|
||||||
|
ClassLoader stringLoader = String.class.getClassLoader();
|
||||||
|
System.out.println(stringLoader);
|
||||||
|
|
||||||
|
|
||||||
|
PriorityQueue<Integer> objects = new PriorityQueue<>();
|
||||||
|
objects.add(1);
|
||||||
|
objects.add(2);
|
||||||
|
objects.add(3);
|
||||||
|
objects.add(4);
|
||||||
|
System.out.println(objects.poll());
|
||||||
|
System.out.println(objects.poll());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,6 +14,9 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
public class LeetCode94 {
|
public class LeetCode94 {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() {
|
||||||
TreeNode root = TreeNode.constructTree(new Integer[]{1, 2, 3, 4});
|
TreeNode root = TreeNode.constructTree(new Integer[]{1, 2, 3, 4});
|
||||||
|
Loading…
Reference in New Issue
Block a user