Compare commits
10 Commits
b8cbf111fe
...
355ac33a49
Author | SHA1 | Date | |
---|---|---|---|
355ac33a49 | |||
00672efdc8 | |||
a1524dde27 | |||
0f6a5b723f | |||
64ea4c89f0 | |||
574e99f373 | |||
61d92b60d5 | |||
2219024e1b | |||
6d49b27147 | |||
33dffb6b07 |
76
ForJdk17/pom.xml
Normal file
76
ForJdk17/pom.xml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<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>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>LeetCode</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>ForJdk17</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>ForJdk17</name>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- Lombok -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.30</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- JPA API -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.persistence</groupId>
|
||||||
|
<artifactId>javax.persistence-api</artifactId>
|
||||||
|
<version>2.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.phantomthief</groupId>
|
||||||
|
<artifactId>simple-pool</artifactId>
|
||||||
|
<version>0.1.17</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!--spring-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-context</artifactId>
|
||||||
|
<version>5.3.18</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cglib</groupId>
|
||||||
|
<artifactId>cglib</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-http</artifactId>
|
||||||
|
<version>5.8.18</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,58 @@
|
|||||||
|
package cn.whaifree.designPattern.Factory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/22 21:14
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class FactoryAndStrategy {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Factory factory = new Factory();
|
||||||
|
Pay pay = factory.getPay(PayType.WX);
|
||||||
|
pay.pay(100);
|
||||||
|
Pay pay2 = factory.getPay(PayType.WX);
|
||||||
|
pay2.pay(200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Pay{
|
||||||
|
void pay(int price);
|
||||||
|
}
|
||||||
|
|
||||||
|
static class WxPay implements Pay {
|
||||||
|
@Override
|
||||||
|
public void pay(int price) {
|
||||||
|
System.out.println("微信支付:" + price);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static class AliPay implements Pay {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pay(int price) {
|
||||||
|
System.out.println("支付宝支付:" + price);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static class Factory{
|
||||||
|
public Pay getPay(PayType payType){
|
||||||
|
return payType.pay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PayType {
|
||||||
|
WX(new WxPay()),
|
||||||
|
ALI(new AliPay()), // 单例
|
||||||
|
;
|
||||||
|
|
||||||
|
private Pay pay;
|
||||||
|
|
||||||
|
PayType(Pay pay) {
|
||||||
|
this.pay = pay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -3,13 +3,42 @@ package cn.whaifree.designPattern;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
|
|
||||||
public class SingletonPattern {
|
public class SingletonPattern {
|
||||||
|
|
||||||
|
static class LazySingleton {
|
||||||
|
private static LazySingleton instance;
|
||||||
|
|
||||||
|
private LazySingleton() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LazySingleton getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new LazySingleton();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class HungrySingleton {
|
||||||
|
private static final HungrySingleton instance = new HungrySingleton();
|
||||||
|
|
||||||
|
private HungrySingleton() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HungrySingleton getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Main{
|
class Main{
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
@ -1,4 +1,5 @@
|
|||||||
package cn.whaifree.designPattern;
|
package cn.whaifree.designPattern.kama.CreateType.AbstractFactoryPattern;
|
||||||
|
|
||||||
|
|
||||||
public class AbstractFactoryPattern {
|
public class AbstractFactoryPattern {
|
||||||
|
|
||||||
@ -60,12 +61,12 @@ class ModernChair implements Chair{
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interface AbstractFactory{
|
interface AbstractFactory{
|
||||||
Sofa generateSofa();
|
Sofa generateSofa();
|
||||||
Chair generateChair();
|
Chair generateChair();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 现代工厂可以创建多种商品
|
||||||
class ModernFactory implements AbstractFactory {
|
class ModernFactory implements AbstractFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -0,0 +1,93 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.CreateType.BuildPattern;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 构造器模式,
|
||||||
|
* public BCycle build() {
|
||||||
|
* return new BCycle(this);
|
||||||
|
* }
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/4 18:18
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class BuildPattern {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
int i = scanner.nextInt();
|
||||||
|
for (int i1 = 0; i1 < i; i1++) {
|
||||||
|
String next = scanner.next();
|
||||||
|
BCycle bCycle = RoadType.getBCycle(next);
|
||||||
|
System.out.println(bCycle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum RoadType{
|
||||||
|
MOUNTAIN("mountain",BCycle.newBuilder().setFrame("Aluminum Frame").setTries("Knobby Tires").build()),
|
||||||
|
ROAD("road",BCycle.newBuilder().setFrame("Carbon Frame").setTries("Slim Tires").build());
|
||||||
|
|
||||||
|
String key;
|
||||||
|
BCycle bCycle;
|
||||||
|
|
||||||
|
RoadType(String road, BCycle build) {
|
||||||
|
this.key = road;
|
||||||
|
this.bCycle = build;
|
||||||
|
}
|
||||||
|
public static BCycle getBCycle(String key){
|
||||||
|
for (RoadType roadType : RoadType.values()) {
|
||||||
|
if(roadType.key.equals(key)){
|
||||||
|
return roadType.bCycle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class BCycle{
|
||||||
|
private String frame;
|
||||||
|
private String tires;
|
||||||
|
|
||||||
|
public BCycle(Builder builder) {
|
||||||
|
this.frame = builder.frame;
|
||||||
|
this.tires = builder.tires;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Builder newBuilder(){
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static class Builder{
|
||||||
|
|
||||||
|
private String frame;
|
||||||
|
private String tires;
|
||||||
|
|
||||||
|
public BCycle build() {
|
||||||
|
return new BCycle(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setFrame(String frame) {
|
||||||
|
this.frame = frame;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTries(String tries) {
|
||||||
|
this.tires = tries;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return frame + " " + tires;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,132 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.CreateType.FactoryMethodPattern;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 工厂方法模式
|
||||||
|
*
|
||||||
|
* 工厂方法模式
|
||||||
|
* 单一产品:工厂方法模式主要用于创建单一类型的产品。它定义了一个创建对象的接口,但允许子类决定实例化哪一个类。
|
||||||
|
* 单一责任原则:工厂方法模式中的工厂类只负责创建一种产品。
|
||||||
|
*
|
||||||
|
* 扩展性:当需要增加新的产品时,需要新增具体的工厂类。
|
||||||
|
* 代码结构:
|
||||||
|
* 定义一个创建产品的接口。
|
||||||
|
* 具体工厂实现这个接口来创建对应的具体产品。
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 抽象工厂模式
|
||||||
|
* 产品族:抽象工厂模式用于创建一组相关或依赖的对象(即产品族),而无需指定它们具体的类。
|
||||||
|
* 多产品:一个工厂可以创建多个相关的对象。
|
||||||
|
* 扩展性:当需要增加新的产品族时,需要新增具体的工厂类;但当需要增加新的产品种类时,不需要修改现有的工厂类。
|
||||||
|
* 代码结构:
|
||||||
|
* 定义一个创建一系列相关产品的接口。
|
||||||
|
* 具体工厂实现这个接口来创建对应的一系列具体产品。
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/4 16:28
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class FactoryMethodPattern {
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
int i = scanner.nextInt();
|
||||||
|
for (int i1 = 0; i1 < i; i1++) {
|
||||||
|
String next = scanner.next();
|
||||||
|
int j = scanner.nextInt();
|
||||||
|
// for (int i2 = 0; i2 < j; i2++) {
|
||||||
|
// Context.getFactory(next).produce();
|
||||||
|
// }
|
||||||
|
for (int k = 0; k < j; k++) {
|
||||||
|
FactoryContext.getiFactory(next).produce();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enum FactoryContext {
|
||||||
|
Circle("Circle", new CircleFactory()),
|
||||||
|
Square("Square", new SquareFactory()),
|
||||||
|
;
|
||||||
|
|
||||||
|
String name;
|
||||||
|
IFactory iFactory;
|
||||||
|
|
||||||
|
FactoryContext(String name, IFactory iFactory) {
|
||||||
|
this.name = name;
|
||||||
|
this.iFactory = iFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IFactory getiFactory(String key) {
|
||||||
|
for (FactoryContext value : values()) {
|
||||||
|
if (value.name.equals(key)) {
|
||||||
|
return value.iFactory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Context{
|
||||||
|
static Map<String, IFactory> map = new HashMap<>();
|
||||||
|
static {
|
||||||
|
map.put("Circle", new CircleFactory());
|
||||||
|
map.put("Square", new SquareFactory());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IFactory getFactory(String key){
|
||||||
|
if (map.containsKey(key)) {
|
||||||
|
return map.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new IFactory() {
|
||||||
|
@Override
|
||||||
|
public Shape produce() {
|
||||||
|
System.out.println("No Factory");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shape{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Circle extends Shape{
|
||||||
|
|
||||||
|
}
|
||||||
|
class Square extends Shape{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFactory{
|
||||||
|
Shape produce();
|
||||||
|
}
|
||||||
|
|
||||||
|
class CircleFactory implements IFactory{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Shape produce() {
|
||||||
|
System.out.println("Circle Block");
|
||||||
|
return new Circle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SquareFactory implements IFactory{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Shape produce() {
|
||||||
|
System.out.println("Square Block");
|
||||||
|
return new Square();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.CreateType.PrototypePattern;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/4 18:35
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class PrototypePattern {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws CloneNotSupportedException {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
String color = scanner.next();
|
||||||
|
int height = scanner.nextInt();
|
||||||
|
int width = scanner.nextInt();
|
||||||
|
int num = scanner.nextInt();
|
||||||
|
Shape shape = new Shape(color, width, height);
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
System.out.println(shape.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Shape implements Cloneable{
|
||||||
|
String color;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
// Color: Red, Width: 10, Height: 5
|
||||||
|
return "Color: " + color + ", Width: " + width + ", Height: " + height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Shape(String color, int width, int height) {
|
||||||
|
this.color = color;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Shape clone() throws CloneNotSupportedException {
|
||||||
|
return (Shape) super.clone();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.AdapterPattern;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/4 18:58
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class AdapterPattern {
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
USBAdapter usbAdapter = new USBAdapter();
|
||||||
|
|
||||||
|
Computer computer = new Computer();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
int i = scanner.nextInt();
|
||||||
|
for (int i1 = 0; i1 < i; i1++) {
|
||||||
|
int i2 = scanner.nextInt();
|
||||||
|
if (i2 == 1) {
|
||||||
|
System.out.println(computer.inject(new TypeCInterface()));
|
||||||
|
}else if (i2 == 2){
|
||||||
|
USBInterface usbInterface = new USBInterface(); // USB接口
|
||||||
|
TypeCInterface adapt = usbAdapter.adapt(usbInterface);// 适配器转换为TypeC
|
||||||
|
System.out.println(computer.inject(adapt));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Computer{
|
||||||
|
|
||||||
|
public String inject(TypeCInterface in) {
|
||||||
|
return in.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class Interface{
|
||||||
|
String data;
|
||||||
|
}
|
||||||
|
|
||||||
|
class USBAdapter {
|
||||||
|
|
||||||
|
public TypeCInterface adapt(USBInterface usbInterface) {
|
||||||
|
return new TypeCInterface(usbInterface.data + " Adapter");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class USBInterface extends TypeCInterface {
|
||||||
|
public USBInterface() {
|
||||||
|
this.data = "USB";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class TypeCInterface extends Interface {
|
||||||
|
|
||||||
|
public TypeCInterface() {
|
||||||
|
this.data = "TypeC";
|
||||||
|
}
|
||||||
|
public TypeCInterface(String data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.BridgingPattern;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 18:36
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class BridgingPattern {
|
||||||
|
|
||||||
|
interface TEL{
|
||||||
|
public void showBrand();
|
||||||
|
}
|
||||||
|
static class Sony implements TEL{
|
||||||
|
public void showBrand(){
|
||||||
|
System.out.print("Sony TV");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static class TCL implements TEL{
|
||||||
|
public void showBrand(){
|
||||||
|
System.out.print("TCL TV");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static abstract class Operation{
|
||||||
|
protected TEL tel;
|
||||||
|
|
||||||
|
public void setTel(TEL tel){
|
||||||
|
this.tel = tel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void operation();
|
||||||
|
}
|
||||||
|
static class Open extends Operation{
|
||||||
|
public void operation(){
|
||||||
|
tel.showBrand();
|
||||||
|
System.out.println(" is ON");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static class Close extends Operation{
|
||||||
|
public void operation(){
|
||||||
|
tel.showBrand();
|
||||||
|
System.out.println(" is OFF");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static class Switch extends Operation{
|
||||||
|
public void operation(){
|
||||||
|
System.out.print("Switching ");
|
||||||
|
tel.showBrand();
|
||||||
|
System.out.println(" channel");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Main{
|
||||||
|
public static void main (String[] args) {
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
int nums = sc.nextInt();
|
||||||
|
TEL tel;
|
||||||
|
Operation opera;
|
||||||
|
while(nums-- > 0){
|
||||||
|
int type = sc.nextInt();
|
||||||
|
int move = sc.nextInt();
|
||||||
|
if(type == 0){
|
||||||
|
tel = new Sony();
|
||||||
|
}else{
|
||||||
|
tel = new TCL();
|
||||||
|
}
|
||||||
|
if(move == 2){
|
||||||
|
opera = new Open();
|
||||||
|
opera.setTel(tel);
|
||||||
|
opera.operation();
|
||||||
|
}else if(move == 3){
|
||||||
|
opera = new Close();
|
||||||
|
opera.setTel(tel);
|
||||||
|
opera.operation();
|
||||||
|
}else{
|
||||||
|
opera = new Switch();
|
||||||
|
opera.setTel(tel);
|
||||||
|
opera.operation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,102 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.ComboPattern;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 19:11
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class ComboPattern {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
CompanyComposite company = new CompanyComposite(sc.next());
|
||||||
|
DepartmentComposite departmentComposite = null;
|
||||||
|
int n = sc.nextInt();
|
||||||
|
while(n > 0){
|
||||||
|
String type = sc.next();
|
||||||
|
if(type.equals("D")){
|
||||||
|
String department = sc.next();
|
||||||
|
departmentComposite = new DepartmentComposite(department);
|
||||||
|
company.add(departmentComposite);
|
||||||
|
}else{
|
||||||
|
String personnel = sc.next();
|
||||||
|
PersonnelLeaf personnelLeaf = new PersonnelLeaf(personnel);
|
||||||
|
if(departmentComposite != null) {
|
||||||
|
departmentComposite.add(personnelLeaf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
System.out.println("Company Structure:");
|
||||||
|
company.print();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Component
|
||||||
|
interface Component{
|
||||||
|
void print();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Leaf
|
||||||
|
static class PersonnelLeaf implements Component{
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public PersonnelLeaf(String name){
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void print() {
|
||||||
|
System.out.println(" "+name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Composite
|
||||||
|
// 部门
|
||||||
|
static class DepartmentComposite implements Component{
|
||||||
|
private String name;
|
||||||
|
private List<Component> list = new ArrayList<>();
|
||||||
|
|
||||||
|
public DepartmentComposite(String name){
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(Component component){
|
||||||
|
list.add(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void print() {
|
||||||
|
System.out.println(" " + name);
|
||||||
|
for(Component component : list){
|
||||||
|
component.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 公司-- 下面包括多个子类(部门-->员工)
|
||||||
|
static class CompanyComposite implements Component{
|
||||||
|
private String name;
|
||||||
|
private List<Component> list = new ArrayList<>();
|
||||||
|
|
||||||
|
public CompanyComposite(String name){
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(Component component){
|
||||||
|
list.add(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void print() {
|
||||||
|
System.out.println(name);
|
||||||
|
for(Component component : list){
|
||||||
|
component.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.DecoratorPattern;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 16:43
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class DecoratorPattern {
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
|
||||||
|
while (scanner.hasNext()) {
|
||||||
|
int a = scanner.nextInt();
|
||||||
|
int b = scanner.nextInt();
|
||||||
|
if (a == 1) {
|
||||||
|
Coffee blackCoffee = new BlackCoffee();
|
||||||
|
CoffeeDecorator coffeeDecorator = new CoffeeDecorator(blackCoffee);
|
||||||
|
coffeeDecorator.decorate(blackCoffee, b);
|
||||||
|
} else {
|
||||||
|
Coffee latte = new Latte();
|
||||||
|
CoffeeDecorator coffeeDecorator = new CoffeeDecorator(latte);
|
||||||
|
coffeeDecorator.decorate(latte, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Coffee {
|
||||||
|
void addCoffeeBeans();
|
||||||
|
}
|
||||||
|
|
||||||
|
class BlackCoffee implements Coffee {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCoffeeBeans() {
|
||||||
|
System.out.println("Brewing Black Coffee");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Latte implements Coffee {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCoffeeBeans() {
|
||||||
|
System.out.println("Brewing Latte");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CoffeeDecorator {
|
||||||
|
|
||||||
|
private final Coffee coffee;
|
||||||
|
|
||||||
|
public CoffeeDecorator(Coffee coffee) {
|
||||||
|
this.coffee = coffee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Coffee decorate(Coffee coffee, int add) {
|
||||||
|
if (add == 1) {
|
||||||
|
addMilk(coffee);
|
||||||
|
} else {
|
||||||
|
addSugar(coffee);
|
||||||
|
}
|
||||||
|
return coffee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMilk(Coffee coffee) {
|
||||||
|
coffee.addCoffeeBeans();
|
||||||
|
System.out.println("Adding Milk");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSugar(Coffee coffee) {
|
||||||
|
coffee.addCoffeeBeans();
|
||||||
|
System.out.println("Adding Sugar");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,53 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.EnjoyPattern;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 19:17
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class EnjoyPattern {
|
||||||
|
|
||||||
|
|
||||||
|
class Shape{
|
||||||
|
private String id;
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
|
||||||
|
|
||||||
|
public Shape(String id, int x, int y) {
|
||||||
|
this.id = id;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getY() {
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShareFactory{
|
||||||
|
|
||||||
|
Map<String, Shape> map;
|
||||||
|
|
||||||
|
public ShareFactory() {
|
||||||
|
this.map = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Shape setAndGetShape(String id,int x,int y){
|
||||||
|
Shape shape = map.get(id);
|
||||||
|
if (shape == null) {
|
||||||
|
shape = new Shape(id, x, y);
|
||||||
|
}
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.FacadePattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 18:15
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class FacadePattern {
|
||||||
|
// 提供了一个统一的接口,用于访问子系统中的一群接口
|
||||||
|
|
||||||
|
public class Facade {
|
||||||
|
private Switch ac;
|
||||||
|
private Switch lamp;
|
||||||
|
private Switch tv;
|
||||||
|
|
||||||
|
public Facade(Switch ac, Switch lamp, Switch tv) {
|
||||||
|
this.ac = ac;
|
||||||
|
this.lamp = lamp;
|
||||||
|
this.tv = tv;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void turnOffAll() {
|
||||||
|
ac.off();
|
||||||
|
lamp.off();
|
||||||
|
tv.off();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void turnOff(int o) {
|
||||||
|
switch (o) {
|
||||||
|
case 1:
|
||||||
|
ac.off();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
lamp.off();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
tv.off();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println("Invalid option.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubSystemClasses
|
||||||
|
// 开关
|
||||||
|
interface Switch{
|
||||||
|
void off();
|
||||||
|
}
|
||||||
|
|
||||||
|
//空调
|
||||||
|
class AirConditioning implements Switch {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void off() {
|
||||||
|
System.out.println("Air Conditioner is turned off.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//台灯
|
||||||
|
class DeskLamp implements Switch {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void off() {
|
||||||
|
System.out.println("Desk Lamp is turned off.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//电视机
|
||||||
|
class Television implements Switch {
|
||||||
|
@Override
|
||||||
|
public void off() {
|
||||||
|
System.out.println("Television is turned off.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.FacadePattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 18:33
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class SpringFactoryBean {
|
||||||
|
}
|
||||||
|
|
||||||
|
//class ProxyFactoryBean extends ProxyCreatorSupport implements FactoryBean<Object>, BeanClassLoaderAware, BeanFactoryAware {
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 门面模式的获取对象
|
||||||
|
// * @return
|
||||||
|
// * @throws BeansException
|
||||||
|
// */
|
||||||
|
// @Nullable
|
||||||
|
// public Object getObject() throws BeansException {
|
||||||
|
// this.initializeAdvisorChain();
|
||||||
|
// if (this.isSingleton()) {
|
||||||
|
// return this.getSingletonInstance();
|
||||||
|
// } else {
|
||||||
|
// if (this.targetName == null) {
|
||||||
|
// this.logger.info("Using non-singleton proxies with singleton targets is often undesirable. Enable prototype proxies by setting the 'targetName' property.");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return this.newPrototypeInstance();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private synchronized Object getSingletonInstance() {
|
||||||
|
// if (this.singletonInstance == null) {
|
||||||
|
// this.targetSource = this.freshTargetSource();
|
||||||
|
// if (this.autodetectInterfaces && this.getProxiedInterfaces().length == 0 && !this.isProxyTargetClass()) {
|
||||||
|
// Class<?> targetClass = this.getTargetClass();
|
||||||
|
// if (targetClass == null) {
|
||||||
|
// throw new FactoryBeanNotInitializedException("Cannot determine target class for proxy");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// this.setInterfaces(ClassUtils.getAllInterfacesForClass(targetClass, this.proxyClassLoader));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// super.setFrozen(this.freezeProxy);
|
||||||
|
// this.singletonInstance = this.getProxy(this.createAopProxy());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return this.singletonInstance;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
@ -0,0 +1,69 @@
|
|||||||
|
package cn.whaifree.designPattern.kama.StructureType.ProxyPattern;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/5 16:30
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class ProxyPattern {
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
int i = scanner.nextInt();
|
||||||
|
Integer[] sizes = new Integer[i];
|
||||||
|
for (int i1 = 0; i1 < i; i1++) {
|
||||||
|
sizes[i1] = scanner.nextInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
User user = new User();
|
||||||
|
Proxy proxy = new Proxy(sizes);
|
||||||
|
proxy.rent(user);
|
||||||
|
}
|
||||||
|
@Data
|
||||||
|
static class House{
|
||||||
|
int size;
|
||||||
|
|
||||||
|
public House(int size) {
|
||||||
|
this.size = size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Proxy {
|
||||||
|
|
||||||
|
List<House> housee;
|
||||||
|
|
||||||
|
|
||||||
|
// 所有房源
|
||||||
|
public Proxy(Integer... integers) {
|
||||||
|
housee = Arrays.stream(integers).map(House::new).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rent(User user) {
|
||||||
|
housee.forEach(
|
||||||
|
house -> {
|
||||||
|
if (house.size < 100) {
|
||||||
|
System.out.println("No");
|
||||||
|
}else {
|
||||||
|
user.rent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class User{
|
||||||
|
public void rent() {
|
||||||
|
System.out.println("YES");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package cn.whaifree.interview.HKWS;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/1 11:25
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class P241001 {
|
||||||
|
public static void main(String[] args){
|
||||||
|
Scanner in = new Scanner(System.in);
|
||||||
|
|
||||||
|
int left;
|
||||||
|
left = Integer.parseInt(in.nextLine().trim());
|
||||||
|
|
||||||
|
int right;
|
||||||
|
right = Integer.parseInt(in.nextLine().trim());
|
||||||
|
|
||||||
|
int[] res = new P241001().getPrimes(left, right);
|
||||||
|
if(res==null||res.length==0){
|
||||||
|
System.out.print("-1");
|
||||||
|
}
|
||||||
|
for(int res_i=0; res_i < res.length; res_i++) {
|
||||||
|
System.out.print(String.valueOf(res[res_i])+" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write Code Here */
|
||||||
|
public int[] getPrimes(int left, int right) {
|
||||||
|
|
||||||
|
List<Integer> res = new ArrayList<>();
|
||||||
|
while (left <= right) {
|
||||||
|
if (isPrime(left)) {
|
||||||
|
res.add(left);
|
||||||
|
}
|
||||||
|
left++;
|
||||||
|
}
|
||||||
|
int[] re = new int[res.size()];
|
||||||
|
for (int i = 0; i < re.length; i++) {
|
||||||
|
re[i] = res.get(i);
|
||||||
|
}
|
||||||
|
return re;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPrime(int n) {
|
||||||
|
if (n <= 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 2; i * i <= n; i++) {
|
||||||
|
if ( n % i == 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
64
ForJdk17/src/main/java/cn/whaifree/interview/HS/Qz/P1.java
Normal file
64
ForJdk17/src/main/java/cn/whaifree/interview/HS/Qz/P1.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package cn.whaifree.interview.HS.Qz;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/26 18:56
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class P1 {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// a + b = c 一只c 求 a*b 的最大值
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
long i = scanner.nextLong();
|
||||||
|
long maxProduct = 0;
|
||||||
|
for (int j = 0; j <= i; j++) {
|
||||||
|
long b = i - j;
|
||||||
|
long product = b * j;
|
||||||
|
maxProduct = Math.max(product, maxProduct);
|
||||||
|
}
|
||||||
|
System.out.println(maxProduct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class p2{
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Scanner in = new Scanner(System.in);
|
||||||
|
// 注意 hasNext 和 hasNextLine 的区别
|
||||||
|
int n = in.nextInt();
|
||||||
|
int k = in.nextInt();
|
||||||
|
if (n <= 1) {
|
||||||
|
System.out.println(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int[] nums = new int[n];
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
nums[i] = in.nextInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
int tmp = 0;
|
||||||
|
for (int i = 1; i < nums.length; i++) {
|
||||||
|
int search = search(nums[i], nums[i - 1]);
|
||||||
|
if (search != -1) {
|
||||||
|
tmp = Math.max(search, tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println(tmp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int search(int a, int b) {
|
||||||
|
int tmp = Math.min(a, b);
|
||||||
|
while (tmp > 0) {
|
||||||
|
if (a % tmp == 0 && b % tmp == 0) {
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
tmp--;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package cn.whaifree.interview.qz.huachen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/19 18:55
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class P1 {
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package cn.whaifree.interview.qz.suiyou;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/24 19:18
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class p1 {
|
||||||
|
}
|
137
ForJdk17/src/main/java/cn/whaifree/interview/qz/zzyc/p1.java
Normal file
137
ForJdk17/src/main/java/cn/whaifree/interview/qz/zzyc/p1.java
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
package cn.whaifree.interview.qz.zzyc;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/20 0:35
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class p1 {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
List<Integer> list = Arrays.asList(0, 11, 12, 13,1);
|
||||||
|
System.out.println(new p1().isStraight(new ArrayList<>(list)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <img src="https://pic.leetcode-cn.com/1599885716-MGMODX-Picture1.png"/>
|
||||||
|
* 1. 排序
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 给定的5张牌是否是顺子
|
||||||
|
* @param nums int整型ArrayList 扑克牌对应的数字集合
|
||||||
|
* @return bool布尔型
|
||||||
|
*/
|
||||||
|
public boolean isStraight (ArrayList<Integer> nums) {
|
||||||
|
// write code here
|
||||||
|
|
||||||
|
Collections.sort(nums);
|
||||||
|
|
||||||
|
|
||||||
|
if (inEdge(nums)) { // 如果出现1 10 11 12 13 这种情况
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int joker = -1;
|
||||||
|
for (int i = 0; i < nums.size() - 1; i++) {
|
||||||
|
if (nums.get(i) == 0) {
|
||||||
|
joker++;
|
||||||
|
} else if (nums.get(i).equals(nums.get(i + 1))) {
|
||||||
|
return false; // 排序后出现重复,不可能是顺子
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 比如 5 4 3 2 1 最大的减去最小在范围内
|
||||||
|
return nums.get(4) - nums.get(joker + 1) < 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static ArrayList<ArrayList<Integer>> o = new ArrayList<>();
|
||||||
|
static {
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(0, 11, 12, 13, 1)));
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(0, 10, 12, 13, 1)));
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(0, 10, 11, 13, 1)));
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(0, 10, 11, 12, 1)));
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(0, 10, 11, 12, 13)));
|
||||||
|
o.add(new ArrayList<>(Arrays.asList(1, 10, 11, 12, 13)));
|
||||||
|
}
|
||||||
|
public static boolean inEdge(ArrayList<Integer> list) {
|
||||||
|
for (ArrayList<Integer> integers : o) {
|
||||||
|
if (integers.equals(list)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public boolean checkDynasty(int[] places) {
|
||||||
|
Set<Integer> repeat = new HashSet<>();
|
||||||
|
int max = 0, min = 14;
|
||||||
|
for(int place : places) {
|
||||||
|
if(place == 0) continue; // 跳过未知朝代
|
||||||
|
max = Math.max(max, place); // 最大编号朝代
|
||||||
|
min = Math.min(min, place); // 最小编号朝代
|
||||||
|
if(repeat.contains(place)) {
|
||||||
|
return false; // 若有重复,提前返回 false
|
||||||
|
}
|
||||||
|
repeat.add(place); // 添加此朝代至 Set
|
||||||
|
}
|
||||||
|
return max - min < 5; // 最大编号朝代 - 最小编号朝代 < 5 则连续
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class P{
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
List<Integer> list = Arrays.asList(1, 4, 6, 6, 11);
|
||||||
|
|
||||||
|
System.out.println(prize(new ArrayList<>(list), 12));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param res int整型ArrayList
|
||||||
|
* @param target int整型
|
||||||
|
* @return int整型
|
||||||
|
*/
|
||||||
|
public static int prize (ArrayList<Integer> res, int target) {
|
||||||
|
// write code here
|
||||||
|
|
||||||
|
// for (int i = 0; i < res.size(); i++) {
|
||||||
|
// if (res.get(i) >= target) {
|
||||||
|
// return i;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
int left = 0;
|
||||||
|
int right = res.size() - 1;
|
||||||
|
while (left <= right) {
|
||||||
|
int mid = (left + right) / 2;
|
||||||
|
if (res.get(mid) > target) {
|
||||||
|
right = mid - 1;
|
||||||
|
} else if (res.get(mid) == target) {
|
||||||
|
return mid + 1;
|
||||||
|
}else {
|
||||||
|
left = mid + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (left < res.size() && res.get(left) > target) {
|
||||||
|
return left + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package cn.whaifree.leetCode.Array;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/19 23:02
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode167 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
|
||||||
|
Solution1 solution = new Solution1();
|
||||||
|
int[] ints = solution.twoSum(new int[]{2,7,11,15}, 9);
|
||||||
|
System.out.println(ints[0] + " " + ints[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int[] twoSum(int[] numbers, int target) {
|
||||||
|
|
||||||
|
for (int i = 0; i < numbers.length; i++) {
|
||||||
|
int tar = target - numbers[i];
|
||||||
|
int j = binarySearch(numbers, tar);
|
||||||
|
if (j != -1 && i != j) {
|
||||||
|
return i < j ? new int[]{i + 1, j + 1} : new int[]{j + 1, i + 1};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int binarySearch(int[] nums, int target) {
|
||||||
|
int left = 0;
|
||||||
|
int right = nums.length - 1;
|
||||||
|
while (left <= right) {
|
||||||
|
int mid = (left + right) / 2;
|
||||||
|
if (nums[mid] == target) {
|
||||||
|
return mid;
|
||||||
|
} else if (nums[mid] < target) {
|
||||||
|
left = mid + 1;
|
||||||
|
} else {
|
||||||
|
right = mid - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution1 {
|
||||||
|
public int[] twoSum(int[] numbers, int target) {
|
||||||
|
int left = 0;
|
||||||
|
int right = numbers.length - 1;
|
||||||
|
while (left < right) {
|
||||||
|
int sum = numbers[left] + numbers[right];
|
||||||
|
if (sum == target) {
|
||||||
|
return new int[]{left + 1, right + 1};
|
||||||
|
} else if (sum < target) {
|
||||||
|
left++;
|
||||||
|
}else {
|
||||||
|
right--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
package cn.whaifree.leetCode.Array;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.channels.AsynchronousFileChannel;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardOpenOption;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/22 14:56
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode228 {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(Paths.get("D:\\project\\LeetCode\\README.md"), StandardOpenOption.READ);
|
||||||
|
ByteBuffer buffer = ByteBuffer.allocate(1024);
|
||||||
|
Future<Integer> result = fileChannel.read(buffer, 0);
|
||||||
|
while (!result.isDone()) {
|
||||||
|
// do something
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
int[] nums = {0, 2};
|
||||||
|
System.out.println(new Solution().summaryRanges(nums));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
|
||||||
|
// public List<String> summaryRanges(int[] nums) {
|
||||||
|
// List<String> path = new ArrayList<>();
|
||||||
|
// List<String> res = new ArrayList<>();
|
||||||
|
// for (int i = 1; i < nums.length; i++) {
|
||||||
|
// if (nums[i] != nums[i - 1]) {
|
||||||
|
// StringBuilder str = new StringBuilder();
|
||||||
|
// for (int j = 0; j < path.size()-1; j++) {
|
||||||
|
// str.append(path.get(j));
|
||||||
|
// str.append("->");
|
||||||
|
// }
|
||||||
|
// str.append(path.get(path.size() - 1));
|
||||||
|
// path.clear();
|
||||||
|
// }
|
||||||
|
// path.add(String.valueOf(nums[i]));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
public List<String> summaryRanges(int[] nums) {
|
||||||
|
|
||||||
|
|
||||||
|
List<String> res = new ArrayList<>();
|
||||||
|
|
||||||
|
int left = 0;
|
||||||
|
int right = 1;
|
||||||
|
while (right < nums.length) {
|
||||||
|
if (nums[right] != nums[right - 1] + 1) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(nums[left]);
|
||||||
|
if (left != right - 1) {
|
||||||
|
stringBuilder.append("->");
|
||||||
|
stringBuilder.append(nums[right - 1]);
|
||||||
|
}
|
||||||
|
res.add(stringBuilder.toString());
|
||||||
|
left = right;
|
||||||
|
}
|
||||||
|
right++;
|
||||||
|
}
|
||||||
|
if (left < nums.length) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(nums[left]);
|
||||||
|
if (left != right - 1) {
|
||||||
|
stringBuilder.append("->");
|
||||||
|
stringBuilder.append(nums[right - 1]);
|
||||||
|
}
|
||||||
|
res.add(stringBuilder.toString());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,102 @@
|
|||||||
|
package cn.whaifree.leetCode.Array;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/23 11:08
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode289 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
int[][] board = new int[][]{{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0}};
|
||||||
|
new Solution().gameOfLife(board);
|
||||||
|
for (int[] ints : board) {
|
||||||
|
System.out.println(Arrays.toString(ints));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为了保证当前修改后的状态不会影响下一个状态的判定,设置另外的状态
|
||||||
|
* 如题所示,只有三种:
|
||||||
|
* 1. 如果当前是活细胞,但是变成了死细胞,那么设置为-1
|
||||||
|
* 2. 如果当前是活细胞,仍然是活细胞,那么不变仍为1
|
||||||
|
* 3. 如果当前是死细胞,但是变成了活细胞,那么设置为2
|
||||||
|
* 那么最后遍历修改完状态之后,将-1修改回为0,2修改回为1
|
||||||
|
* @param board
|
||||||
|
*/
|
||||||
|
public void gameOfLife(int[][] board) {
|
||||||
|
//设置方向来遍历某个节点周围的另外几个节点
|
||||||
|
int[] ner = new int[]{-1,0,1};
|
||||||
|
//获取行和列
|
||||||
|
int rows = board.length;
|
||||||
|
int cols = board[0].length;
|
||||||
|
//遍历每一个节点格子
|
||||||
|
for (int row = 0; row < rows; row++) {
|
||||||
|
for (int col = 0; col < cols; col++) {
|
||||||
|
//设置当前节点周围的存活细胞的数量
|
||||||
|
int liveNer = 0;
|
||||||
|
/**
|
||||||
|
* 当前节点是[ i , j ]
|
||||||
|
* [i-1,j-1] [i-1,j] [i-1,j+1]
|
||||||
|
* [ i ,j-1] [ i ,j] [ i ,j+1]
|
||||||
|
* [i+1,j-1] [i+1,j] [i+1,j+1]
|
||||||
|
* 那么以当前节点为中心,要求周围的节点,则最多是3*3形式
|
||||||
|
* 并且所有的行和列都是用当前节点+1或者-1或者不变构成
|
||||||
|
* 所以我们设置 ner = {-1,0,1} 来形成遍历
|
||||||
|
*/
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
//必须保证不计算当前节点(不计算自己)
|
||||||
|
if (!(ner[i]==0 && ner[j]==0)){
|
||||||
|
//当前节点的相邻节点坐标
|
||||||
|
int r = row+ner[i];
|
||||||
|
int c = col+ner[j];
|
||||||
|
/**判断当前周围节点的存活状态,要求满足两个状态
|
||||||
|
* 1. 必须保证要在 board 矩阵中
|
||||||
|
* 2. 并且**起始状态要是存活,则当前状态为1或者-1都可以(因为这两个状态都表示起始状态为活细胞)**
|
||||||
|
**/
|
||||||
|
if ((r >= 0 && r < rows) && (c >= 0 && c < cols) && (Math.abs(board[r][c]) == 1)) {
|
||||||
|
// -1和1 初始状态都是活细胞
|
||||||
|
liveNer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**开始判断当前节点的存活状态
|
||||||
|
* 因为遍历到当前节点的时候,还没有开始修改细胞状态,所以还是0和1的细胞状态
|
||||||
|
* 那么只需要判断状态变化的即可,否则状态不变
|
||||||
|
**/
|
||||||
|
if ((board[row][col]==1) && ( liveNer>3 || liveNer<2)){
|
||||||
|
// -1 代表这个细胞过去是活的现在死了
|
||||||
|
board[row][col]=-1;
|
||||||
|
}
|
||||||
|
if (board[row][col]==0 && ( liveNer==3)){
|
||||||
|
// 2 代表这个细胞过去是死的现在活了
|
||||||
|
board[row][col]=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//再把额外的状态修改回去
|
||||||
|
for (int row = 0; row < rows; row++) {
|
||||||
|
for (int col = 0; col < cols; col++) {
|
||||||
|
if (board[row][col] == 2) {
|
||||||
|
board[row][col] = 1;
|
||||||
|
}
|
||||||
|
if (board[row][col] == -1){
|
||||||
|
board[row][col] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.whaifree.leetCode.Array;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.PriorityQueue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/22 15:14
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode703 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
KthLargest kthLargest = new KthLargest(3, new int[]{});
|
||||||
|
System.out.println(kthLargest.add(3));
|
||||||
|
System.out.println(kthLargest.add(5));
|
||||||
|
System.out.println(kthLargest.add(10));
|
||||||
|
System.out.println(kthLargest.add(9));
|
||||||
|
System.out.println(kthLargest.add(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
class KthLargest {
|
||||||
|
|
||||||
|
PriorityQueue<Integer> priorityQueue = null;
|
||||||
|
int size = 0;
|
||||||
|
|
||||||
|
// 小顶堆 第k
|
||||||
|
public KthLargest(int k, int[] nums) {
|
||||||
|
priorityQueue = new PriorityQueue<>();
|
||||||
|
this.size = k;
|
||||||
|
for (int num : nums) {
|
||||||
|
priorityQueue.offer(num);
|
||||||
|
if (priorityQueue.size() > k) {
|
||||||
|
priorityQueue.poll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int add(int val) {
|
||||||
|
priorityQueue.offer(val);
|
||||||
|
if (priorityQueue.size() > size) {
|
||||||
|
priorityQueue.poll();
|
||||||
|
}
|
||||||
|
return priorityQueue.peek();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package cn.whaifree.leetCode.Array;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/9/23 9:18
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode73 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
int[][] matrix = new int[][]{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
|
||||||
|
new Solution().setZeroes(matrix);
|
||||||
|
for (int[] ints : matrix) {
|
||||||
|
System.out.println(Arrays.toString(ints));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public void setZeroes(int[][] matrix) {
|
||||||
|
|
||||||
|
int yLen = matrix.length;
|
||||||
|
boolean[] row = new boolean[yLen];
|
||||||
|
int xLen = matrix[0].length;
|
||||||
|
boolean[] col = new boolean[xLen];
|
||||||
|
|
||||||
|
|
||||||
|
for (int y = 0; y < yLen; y++) {
|
||||||
|
for (int x = 0; x < xLen; x++) {
|
||||||
|
if (matrix[y][x] == 0) {
|
||||||
|
row[y] = true;
|
||||||
|
col[x] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int y = 0; y < yLen; y++) {
|
||||||
|
for (int x = 0; x < xLen; x++) {
|
||||||
|
if (row[y] || col[x]) {
|
||||||
|
matrix[y][x] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user