生成序列
package array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class GenerateArray {
public static void main(String[] args) {
createArray(3);
}
static class Number implements Comparable<Number>{
int number;
int index;
@Override
public int compareTo(Number o) {
if(this.number < o.number){
return 1;
}else if(this.number == o.number){
return 0;
}
return -1;
}
enum Direction {
Left,
Right
}
Direction direction;
public Number(int num){
this.number = num;
index = num-1;
direction = Direction.Left;
}
}
public static void createArray(int n){
if(n <= 1){
System.out.println("1");
return;
}
List<Number> numbs = new ArrayList<Number>();
for(int i=0; i<n; i++){
numbs.add(new Number(i+1));
System.out.print((i+1)+" ");
}
System.out.println();
for(;;){
boolean flag = true;
List<Number> mover = new ArrayList<Number>();
if(numbs.get(0).direction != Number.Direction.Left){
if(numbs.get(0).number > numbs.get(1).number){
mover.add(numbs.get(0));
flag = false;
}
}
for(int i=1; i<n-1; i++){
switch (numbs.get(i).direction){
case Left:
if(numbs.get(i-1).number < numbs.get(i).number){
mover.add(numbs.get(i));
flag = false;
}
break;
case Right:
if(numbs.get(i-1).number < numbs.get(i).number){
mover.add(numbs.get(i));
flag = false;
}
break;
}
}
if(numbs.get(n-1).direction != Number.Direction.Right){
if(numbs.get(n-1).number > numbs.get(n-2).number){
mover.add(numbs.get(n-1));
flag = false;
}
}
if(!flag) {
Collections.sort(mover);
int bigNumbIndex = mover.get(0).index;
Number big,small;
switch (numbs.get(bigNumbIndex).direction){
case Left:
numbs.get(bigNumbIndex).index = bigNumbIndex-1;
numbs.get(bigNumbIndex-1).index = bigNumbIndex;
big = numbs.get(bigNumbIndex);
small = numbs.get(bigNumbIndex-1);
numbs.remove(bigNumbIndex - 1);
numbs.remove(bigNumbIndex - 1);
numbs.add(big.index,big);
numbs.add(small.index,small);
bigNumbIndex--;
break;
case Right:
numbs.get(bigNumbIndex).index = bigNumbIndex+1;
numbs.get(bigNumbIndex+1).index = bigNumbIndex;
big = numbs.get(bigNumbIndex);
small = numbs.get(bigNumbIndex+1);
numbs.remove(bigNumbIndex);
numbs.remove(bigNumbIndex);
numbs.add(small.index,small);
numbs.add(big.index,big);
bigNumbIndex++;
break;
}
for(int i=0; i<n; i++){
if(i != bigNumbIndex && numbs.get(i).number > numbs.get(bigNumbIndex).number){
numbs.get(i).direction = numbs.get(i).direction == Number.Direction.Left ? Number.Direction.Right
: Number.Direction.Left;
}
}
for(int i=0; i<n; i++){
System.out.print(numbs.get(i).number +" ");
}
System.out.println();
}else{
break;
}
}
}
}
相關文章
- 序列生成函式函式
- 【譯】自動生成整型序列
- matlab 生成隨機數序列Matlab隨機
- SQL 難點解決:序列生成SQL
- 使用 Linux seq 命令生成數字序列Linux
- Java自動生成訂單序列號Java
- matlab生成0,1隨機序列Matlab隨機
- 將VAE用於時間序列:生成時間序列的合成資料
- 序列化篇 生成xml 以及讀取xmlXML
- m序列的生成--閒來無事寫程式碼
- im客戶端生成訊息序列號演算法客戶端演算法
- 題解:P11008 『STA - R7』異或生成序列
- P11008 『STA - R7』異或生成序列 題解
- 利用 Redis 生成序列號的功能實現編號自增Redis
- Intellij IDEA 2018用快捷鍵自動生成序列化idIntelliJIdea
- 同時生成蛋白序列和結構,David Baker團隊序列空間擴散新模型登Nature子刊模型
- 搜參,序列生成,最佳化方法——窮舉,greedy search,beamsearch,bayessearch, viterbisearchViterbi
- 高併發環境下生成序列編碼重複問題分析
- 技術分享| 如何部署安裝分散式序列號生成器系統分散式
- 生成超10萬bp的DNA序列,北理工邵斌團隊生成式DNA大語言模型,登Nature子刊模型
- Complete the Sequence (生成完整序列數)第一次做英文c++的題C++
- 【時間序列分析】01. 時間序列·平穩序列
- 物件序列化(序列化)物件
- 【Dynamo】AnyCAD使用Dynamo繪製三維模型(二)——生成序列和範圍的幾種方式模型
- 「IDEA外掛精選」安利一個IDEA騷操作:一鍵生成方法的序列圖Idea
- Java序列化、反序列化、反序列化漏洞Java
- 序列化與反序列化
- 裁剪序列
- Prufer序列
- 序列 DP
- 序列化與反序列化(GO)Go
- 擴散模型的多元化應用:藥物發現、文字生成、時間序列預測等模型
- C++ 序列化和反序列化C++
- Hive的序列化/反序列化(SerDe)Hive
- python的序列化和反序列化Python
- ctf serialize 序列化和反序列化
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java