java寫演算法
packagecom.complaints;
importjava.util.ArrayList;
importjava.util.List;
importorg.junit.Test;
importcom.alibaba.fastjson.JSONArray;
publicclasstest{
privateList<MTS>org_list=newArrayList<MTS>();
privateList<MTS>final_list=newArrayList<MTS>();
publictest(){
MTSa=newMTS();
a.setId("1");
MTSb=newMTS();
b.setId("1.1");
MTSc=newMTS();
c.setId("1.1.1");
MTSd=newMTS();
d.setId("2");
MTSe=newMTS();
e.setId("2.1");
org_list.add(a);
org_list.add(b);
org_list.add(c);
org_list.add(d);
org_list.add(e);
}
@Test
publicvoidarrange(){
for(inti=0;i<org_list.size();i++){
Stringid=org_list.get(i).getId();
intcnt=id.split("\.").length;
Stringtar_string=id+".";
intchild_cnt=0;
for(intk=0;k<org_list.size();k++){
Stringchild_id=org_list.get(k).getId();
intz=child_id.indexOf(tar_string);
String[]aaa=child_id.split("\.");
inty=aaa.length-1;
if(z==0&&y==cnt){
this.addChild(org_list.get(i),org_list.get(k));
child_cnt++;
}
}
if(cnt==1&&child_cnt!=0){
final_list.add(org_list.get(i));
}
}
Stringjson=JSONArray.toJSONString(final_list);
System.out.println(json);
}
privatevoidaddChild(MTSparent,MTSchild){
List<MTS>childs=parent.getChildMTS();
if(childs==null){
childs=newArrayList<MTS>();
}
childs.add(child);
parent.setChildMTS(childs);
}
}
最後輸出結果:[{"childMTS":[{"childMTS":[{"id":"1.1.1"}],"id":"1.1"}],"id":"1"},{"childMTS":[{"id":"2.1"}],"id":"2"}],應該是符合你需求的
B. 用Java寫一個演算法,把一串數字,所有可能的和按順序排列,並計算每個和出現的次數
樓主你好
應你的要求 我只做了加一位的和加兩位的
演算法類代碼如下:
public class CountSumClass {
private String number;
private String result = new String("");
public CountSumClass() {
number = new String();
}
public CountSumClass(String str) {
number = str;
}
public String getResult() {
return result;
}
public void addOne() {
int x,y;
for (int i = 0; i < number.length()-1; i++) {
x = (int)number.charAt(i) - 48;
for(int j = i+1; j<number.length(); j++) {
y = (int)number.charAt(j) - 48;
result += x+"+"+y+"="+(x+y)+"\n";
}
}
y=0;
for (int i = 0; i<number.length(); i++) {
x = (int)number.charAt(i) - 48;
y += x;
if(i == number.length()- 1) {
result += x+"="+y;
} else {
result += x+"+";
}
}
}
public void addTwo() {
int x,y,z;
result += "\n";
for (int i = 0; i<number.length()-1; i++) {
String substr = number.substring(i,i+2);
x = Integer.parseInt(substr);
z = (x%10) * 10 + (x/10);
for(int j=0; j<number.length(); j++) {
if(j!=i && j!=i+1) {
y = (int)number.charAt(j) - 48;
result += x+"+"+y+"="+(x+y)+"\n";
result += z+"+"+y+"="+(z+y)+"\n";
}
}
}
}
public String toString() {
return result;
}
}
希望能幫助你哈
C. 用java做演算法好嗎
java是建立在許多軟體基礎上的編程語言,對於演算法程序的優化手段受到很大限制,這些都不利於做演算法
可以考慮用c做演算法,可以在兼顧可移植性的同時盡量優化,然後在java中調用。
D. java十大演算法
演算法一:快速排序演算法
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。
快速排序使用分治法(Divide and conquer)策略來把一個串列(list)分為兩個子串列(sub-lists)。
演算法步驟:
1 從數列中挑出一個元素,稱為 "基準"(pivot),
2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
3 遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
演算法二:堆排序演算法
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
堆排序的平均時間復雜度為Ο(nlogn) 。
演算法步驟:
創建一個堆H[0..n-1]
把堆首(最大值)和堆尾互換
3. 把堆的尺寸縮小1,並調用shift_down(0),目的是把新的數組頂端數據調整到相應位置
4. 重復步驟2,直到堆的尺寸為1
演算法三:歸並排序
歸並排序(Merge sort,台灣譯作:合並排序)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
演算法步驟:
1. 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合並後的序列
2. 設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3. 比較兩個指針所指向的元素,選擇相對小的元素放入到合並空間,並移動指針到下一位置
4. 重復步驟3直到某一指針達到序列尾
5. 將另一序列剩下的所有元素
E. java寫演算法,多個時間段,去掉重復之後的時間差(小時)
用文字表達一下演算法思路吧
考慮到時間可能不是整點,讓演算法更兼容,這里統一將時間轉換成基於00:00的精度到分的時間戳;
即07:00 = 7 * 60 = 420,10:00 = 10 * 60 = 600;
導入第一組工時數據
轉換成時間戳,兩個為一組
將連續的時間段存入數組
導入第N組工時數據並轉換成時間戳
將第N組開工時間戳和收工時間戳和數組中的連續時間段進行比較
根據比較結果維護連續時間段的數組
根據數組計算出結果或者在循環處理數據時直接累加結果
F. 用java寫演算法
public class TextFilef{
public static String[] Analyze(String stringNumbers){
String numbers[]=new String[10];
int begin=0;
int end=0;
int count=0;
stringNumbers=stringNumbers.trim();
do{
end=stringNumbers.indexOf(' ');//第一個空格的位置
numbers[count++]=stringNumbers.substring(begin,end).trim();
//取得begin,end之間的子串
stringNumbers=stringNumbers.substring(end).trim();//去掉已經存到數組中的那些字元
}while(!stringNumbers.equals("")||stringNumbers.indexOf(' ')!=-1);//循環直到字元串中沒有空格,或者字元串已經掃描完了,才會結束
return numbers;
}
}
樓主可以做一個測試程序冊以下,我已經測試通過了。
G. 如何用JAVA寫一個演算法實現實際輸入一個數N
import java.util.Scanner;
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("請輸入一個正整數n");
int num=in.nextInt();
int sum=1;
for(int i=1;i<=num;i++){
sum=sum*i;
}
System.out.println("sum="+sum);
}
}
H. 請用java設計一個演算法
有一種非常簡單的做法,直接利用現有的java API幫助你解決解決這個問題。
import java.util.Arrays;
import java.util.Comparator;
public class Test{
//newArray[] 為需要傳入的數組對象
public static void reSortArray(String newArray[]){
String[] array = new String[]{"admin","viewer","operator","designer"}; //定義標准數組對象
final String str = Arrays.toString(array); //將標准數組對象中的數據轉化為String
//使用Arrays類已實現好的數組排序方法,傳入要排序的數組,以及比較器
Arrays.sort(newArray,new Comparator<String>(){
public int compare(String o1, String o2) {
return str.indexOf(o1)-str.indexOf(o2);
} } );
System.out.println(Arrays.toString(newArray)); //列印出排序後的數組內容
}
public static void main(String[] args) {
Test.reSortArray(new String[]{"operator","viewer","admin"} );//輸出admin、viewer、operator
}
}
以上排序操作均由java api幫我們完成,性能方面比我們一個個比較要好的多。樓主如果對上述方法有啥不理解的地方,可以M我。
I. JAVA 實現演算法
編碼是不能用字元串的,大大大降低速度
public class Test{
static public int getIntegerComplement(int n){
return ~n&((1<<(32-Integer.numberOfLeadingZeros(n)))-1);
}
public static void main(String[] args){
int a[]={1,5,50,256,65536};
for(int i:a){
int r=getIntegerComplement(i);
System.out.println(i+" "+Integer.toBinaryString(i)+
" => "+r+" "+Integer.toBinaryString(r));
}
}
}
========
1 1 => 0 0
5 101 => 2 10
50 110010 => 13 1101
256 100000000 => 255 11111111
65536 10000000000000000 => 65535 1111111111111111