This commit is contained in:
whai 2024-03-03 20:09:37 +08:00
parent f14703c22a
commit bbb29153f5
9 changed files with 334 additions and 131 deletions

View File

@ -0,0 +1,21 @@
package cn.whaifree.leetCode;
public class StaticObjTest {
static class Test{
// 静态变量存方法区
static ObjectHolder staticObj = new ObjectHolder();
// 成员变量存堆中
ObjectHolder instanceObj = new ObjectHolder();
void foo(){
// 变量名存放在foo()方法中的栈帧中的局部变量表中
ObjectHolder localObj = new ObjectHolder();
System.out.println("done");
}
}
private static class ObjectHolder{
}
}

View File

@ -1,130 +0,0 @@
package cn.whaifree.leetCode;
import java.util.ArrayList;
import java.util.Random;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/2/27 17:58
* @注释
*/
public class T {
public int A() {
B();
return 1;
}
public void B() {
}
}
interface Animal {
void eat();
}
class Hunter{
void hunt() {
}
}
class Cat extends Hunter implements Animal {
@Override
void hunt() {
System.out.println("cat hunt");
}
@Override
public void eat() {
System.out.println("cat eat");
}
}
class Dog extends Hunter implements Animal {
public Dog() {
super();
}
public Dog(String name) {
super();
}
@Override
void hunt() {
System.out.println("dog hunt");
}
@Override
public void eat() {
System.out.println("dog eat");
}
}
class AnimalTest {
public static void main(String[] args) {
// 晚期绑定动态链接
// 运行时才能确定
Animal animal = new Cat();
animal.eat();
Hunter hunter = (Hunter) animal;
hunter.hunt();
// 静态多态
Dog dog = new Dog("!23");
}
}
class Father{
public static void print(String str){
System. out. println("father "+str);
}
public void show(String str){
System. out. println("father"+str);
}
}
class Son extends Father {
}
class VirtualMethodTest {
public static void main(String[] args) {
Son.print("coder");
Father fa = new Father();
fa.show("a");
}
}
class Picture{
int number = 0;
public Picture() {
}
public Picture(int number) {
this.number = number;
}
public static void main(String[]args){
ArrayList<Picture> list = new ArrayList<>();
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e){
e.printStackTrace();
}
list.add(new Picture(new Random().nextInt(1024*1024)));
}
}
}

View File

@ -0,0 +1,77 @@
package cn.whaifree.redo.redo_24_3_1;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.ToIntFunction;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/3/2 11:40
* @注释
*/
public class LeetCode1005 {
@Test
public void test() {
int[] nums = new int[]{5,6,9,-3,3};
int k =2;
int res = new Solution1().largestSumAfterKNegations(nums, k);
System.out.println(res);
}
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
// 从小到大排序把前面的负数替换后如果k是否有剩余
Arrays.sort(nums);
int sum = 0;
int minInNums = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
if (nums[i] < 0 && k > 0) {
nums[i] = -nums[i];
k--;
}
minInNums = Math.min(minInNums, nums[i]);
sum += nums[i];
}
if ((k % 2 == 1 )) {
sum = sum - minInNums - minInNums;
}
return sum;
}
}
class Solution1 {
public int largestSumAfterKNegations(int[] nums, int k) {
// 按照绝对值排序
nums = Arrays.stream(nums).boxed().sorted(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Math.abs(o2) - Math.abs(o1);
}
}).mapToInt(Integer::intValue).toArray();
int sum = 0;
// 9 -8 -7 6 4 3
for (int i = 0; i < nums.length; i++) {
if (nums[i] < 0 && k > 0) {
nums[i] = -nums[i];
k--;
}
sum += nums[i];
}
if (k % 2 == 1 ) {
sum -= nums[nums.length - 1] + nums[nums.length - 1];
}
return sum;
}
}
}

View File

@ -10,6 +10,11 @@ import org.junit.Test;
*/
public class LeetCode134 {
public static void main(String[] args) {
}
@Test
public void test() {
System.out.println(new Solution().canCompleteCircuit(new int[]{1, 2, 3, 4, 5}, new int[]{3, 4, 5, 1, 2}));

View File

@ -0,0 +1,49 @@
package cn.whaifree.redo.redo_24_3_1;
import org.junit.Test;
import java.util.Arrays;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/3/3 12:16
* @注释
*/
public class LeetCode135 {
@Test
public void test() {
new Solution().candy(new int[]{1, 0, 2, 4, 1});
}
class Solution {
public int candy(int[] ratings) {
// 从前往后如果rating高+1糖果
int[] distribute = new int[ratings.length];
distribute[0] = 1;
for (int i = 1; i < ratings.length; i++) {
if (distribute[i]==0) distribute[i] = 1;
if (ratings[i] > ratings[i - 1]) {
distribute[i] = distribute[i - 1] + 1;
}
}
for (int i = distribute.length - 1; i > 0; i--) {
// 需要同时满足 比两边都高
if (ratings[i - 1] > ratings[i]) {
distribute[i - 1] = Math.max(distribute[i - 1], distribute[i] + 1);
}
}
int sum = 0;
for (int i : distribute) {
sum += i;
}
return sum;
}
}
}

View File

@ -0,0 +1,80 @@
package cn.whaifree.redo.redo_24_3_1;
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/3/3 12:30
* @注释
*/
public class LeetCode406 {
@Test
public void test() {
String a = "d";
String b = "d";
System.out.println(a == b);
a = new String("d");
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println(a == b);
new Solution().reconstructQueue(
new int[][]{{7, 0}, {4, 4}, {7, 1}, {5, 0}, {6, 1}, {5, 2}}
);
}
class Solution {
public int[][] reconstructQueue(int[][] people) {
LinkedList<int[]> e = new LinkedList<>();
// 1. 安升高先排序同身高k多的放后面
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {
return o1[1] - o2[1];
}else {
return o2[0] - o1[0];
}
}
});
for (int[] person : people) {
e.add(person[1], person);
}
return e.toArray(new int[people.length][]);
}
}
}
class StringExer{
String str = new String("good");
char[] chars = {'a', 'b', 'c', 'd'};
public void change(String str, char[] chars) {
str = "bad";
chars[0] = 'e';
}
public static void main(String[] args) {
StringExer stringExer = new StringExer();
stringExer.change(stringExer.str, stringExer.chars);
System.out.println(stringExer.str);
System.out.println(stringExer.chars);
}
}

View File

@ -0,0 +1,56 @@
package cn.whaifree.redo.redo_24_3_1;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/3/3 19:40
* @注释
*/
public class LeetCode491 {
@Test
public void test() {
for (List<Integer> subsequence : new Solution().findSubsequences(new int[]{4,4,3,2,1})) {
System.out.println(subsequence);
}
}
class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> findSubsequences(int[] nums) {
backTracking(nums, 0);
return res;
}
public void backTracking(int[] nums, int start) {
if (path.size() >= 2) {
res.add(new LinkedList<>(path));
}
if (start >= nums.length) {
return;
}
HashSet<Integer> set = new HashSet<>();
for (int i = start; i < nums.length; i++) {
if ((path.isEmpty() || path.getLast() <= nums[i]) && !set.contains(nums[i])) {
path.add(nums[i]);
set.add(nums[i]);
backTracking(nums, i + 1);
path.removeLast();
}
}
}
}
}

View File

@ -1,6 +1,6 @@
package cn.whaifree.redo.redo_24_3_1;
import cn.whaifree.leetCode.T;
import org.junit.Test;
import java.util.ArrayList;

View File

@ -0,0 +1,45 @@
package cn.whaifree.redo.redo_24_3_1;
import org.junit.Test;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/3/3 11:57
* @注释
*/
public class LeetCode860 {
@Test
public void test() {
System.out.println(new Solution().lemonadeChange(new int[]{5,5,10,10,20}));
}
class Solution {
public boolean lemonadeChange(int[] bills) {
int haveFive = 0;
int haveTen = 0;
for (int bill : bills) {
if (bill == 5) {
haveFive++;
} else if (bill == 10) {
haveTen++;
haveFive--;
} else if (bill == 20) {
if (haveTen >= 1) {
haveTen--;
haveFive--;
}else {
haveFive -= 3;
}
}
if (haveFive < 0 || haveTen < 0) {
return false;
}
}
return true;
}
}
}