演算法學習01 逆序數和全排列
阿新 • • 發佈:2019-01-28
今天寒假第一天開始認認真真的學習Java演算法,主要學習了兩個題。
1.逆序數
就是找這個數的後面,有幾個數比它小
import java.util.Iterator; import java.util.Scanner; public class Inversion_num { public static void main(String args[]){ Scanner input =new Scanner(System.in); boolean operation=true; while(operation) { String string=input.nextLine(); System.out.println(inversionNum(string)); operation=false; } } public static int inversionNum(String string){ int count=0; String a[]=string.split(" ");
int b[]=new int[a.length]; for(int i=0;i<a.length;i++) { b[i]=Integer.parseInt(a[i]); }//將輸入的字串以空格分開,存到新的整形陣列b中 for(int j = 0;j<b.length;j++) { for (int i = j+1; i < b.length; i++) { if(b[j]>b[i]) { count++; } } } return count; } }
input:
4 3 6 5 1 2output:
10
2.全排列
運用遞迴的方式來處理全排列,最後把結果存到TreeSet中,剔除重複值。
import java.util.Scanner;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class W01 {
long count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
//Scanner scanner=new Scanner(System.in);
//int n=scanner.nextInt();
List<Integer> s=new ArrayList<Integer>();
List<Integer> rs=new ArrayList<Integer>();
s.add(3);
s.add(2);
s.add(2);
s.add(1);
s.add(4);
s.add(5);
fullpermutation(s,rs);
Iterator<String> iterator=ts.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
System.out.println("總數是:"+ts.size());
}
static TreeSet<String> ts=new TreeSet<String>();
private static void fullpermutation(List<Integer> s, List<Integer> rs) {
// TODO Auto-generated method stub
if(s.size()==1) {
rs.add(s.get(0));
//System.out.println(rs.toString());
ts.add(rs.toString());
rs.remove(rs.size()-1);
}else {
for(int i=0;i<s.size();i++) {
rs.add(s.get(i));
List<Integer> tmp=new ArrayList<Integer>();
for (Integer a : s) {
tmp.add(a);
}
tmp.remove(i);
fullpermutation(tmp, rs);
rs.remove(rs.size()-1);
}
}
}
}
output:
…………
…………[5, 4, 2, 2, 1, 3]
[5, 4, 2, 2, 3, 1]
[5, 4, 2, 3, 1, 2]
[5, 4, 2, 3, 2, 1]
[5, 4, 3, 1, 2, 2]
[5, 4, 3, 2, 1, 2]
[5, 4, 3, 2, 2, 1]
總數是:360
感覺在演算法方面還是比較小白,繼續加油努力!!