配列内で繰り返される要素の解析、検索(Java)
2815 ワード
配列に繰り返される要素を解析し、検索し、Javaを実装します.
「データ構造とアルゴリズム分析:配列に重複する要素を解析、検索」
質問の説明:構造化されたデータで、昇順などの順序で並べられた配列の中で、秩序配列dataのような同じ要素が何回も繰り返し現れると仮定します.
data = { "A", "A", "B", "C", "C", "D", "D", "D" }
data配列では、A->Z昇順に並べられていたが、配列内部のデータ要素が不規則に繰り返される:'A'は配列位置0,1(注:0,1は下付き、以下同)で2回繰り返される.'B’は重複していない;C’は配列位置3,4で2回繰り返し現れる;D’は5,6,7の位置で3回繰り返される.
このようなデータ構造に対して、アルゴリズムを設計し、配列に繰り返される要素の検索、分析をコードする.
アルゴリズムの応用シーン:このアルゴリズムの応用シーンの一つは、通信録の連絡先の操作に関与することである.例えば私が前に書いた文章:『AndroidはPinnedSectionListViewに基づいて連絡先通信録を実現する』(リンクアドレス:http://blog.csdn.net/zhangphil/article/details/47271741この文書は、連絡先の姓の先頭文字に従ってグループ化する必要がある通信録の分類整理に関連しています).通常、1つの携帯電話の連絡先には複数の連絡先が存在し、各連絡先には姓があり、姓の頭文字(例えば、中国語姓「張」、Zhang、頭文字「Z」)に従って昇順に並べば、上記data配列のようなデータ構造を構成し、さらに連絡先をグループ化する.例えば、いずれも張姓連絡先であれば、「Z」グループに分類され、ユーザーが通信録のいずれかの姓連絡先を迅速に検索するのに便利である.したがって,この現実における応用シーンをデータモデルとして構築することは,本アルゴリズムが解決すべき計算問題である.コード実装(Java)のアルゴリズムを示します.
結果出力:
配列に繰り返される要素を解析し、検索し、Javaを実装します.
「データ構造とアルゴリズム分析:配列に重複する要素を解析、検索」
質問の説明:構造化されたデータで、昇順などの順序で並べられた配列の中で、秩序配列dataのような同じ要素が何回も繰り返し現れると仮定します.
data = { "A", "A", "B", "C", "C", "D", "D", "D" }
data配列では、A->Z昇順に並べられていたが、配列内部のデータ要素が不規則に繰り返される:'A'は配列位置0,1(注:0,1は下付き、以下同)で2回繰り返される.'B’は重複していない;C’は配列位置3,4で2回繰り返し現れる;D’は5,6,7の位置で3回繰り返される.
このようなデータ構造に対して、アルゴリズムを設計し、配列に繰り返される要素の検索、分析をコードする.
アルゴリズムの応用シーン:このアルゴリズムの応用シーンの一つは、通信録の連絡先の操作に関与することである.例えば私が前に書いた文章:『AndroidはPinnedSectionListViewに基づいて連絡先通信録を実現する』(リンクアドレス:http://blog.csdn.net/zhangphil/article/details/47271741この文書は、連絡先の姓の先頭文字に従ってグループ化する必要がある通信録の分類整理に関連しています).通常、1つの携帯電話の連絡先には複数の連絡先が存在し、各連絡先には姓があり、姓の頭文字(例えば、中国語姓「張」、Zhang、頭文字「Z」)に従って昇順に並べば、上記data配列のようなデータ構造を構成し、さらに連絡先をグループ化する.例えば、いずれも張姓連絡先であれば、「Z」グループに分類され、ユーザーが通信録のいずれかの姓連絡先を迅速に検索するのに便利である.したがって,この現実における応用シーンをデータモデルとして構築することは,本アルゴリズムが解決すべき計算問題である.コード実装(Java)のアルゴリズムを示します.
import java.util.ArrayList;
public class Test {
// data。 data 。
// , 。
// 、 data 。
// , data , 'C' 2,3 。
// ! , 'B'。
private String[] data = { "A", "A", "B", "C", "C", "D", "D", "D" };
// 。
private ArrayList groups = new ArrayList();
// 。
public void find() {
// index
int index = 0, j = 0;
while (index < data.length) {
Group group = new Group();
group.title = data[index];
String t = group.title;
ArrayList children = new ArrayList();
for (j = index; j < data.length; j++) {
String child = data[j];
if (t.equals(child)) {
// j, 、 。
children.add(child + "@" + j);
} else {
break;
}
}
// index
index = j;
group.children = children;
groups.add(group);
}
}
// 。
private void print() {
for (int i = 0; i < groups.size(); i++) {
Group g = groups.get(i);
System.out.println(g);
}
}
// , 。
// title group 。
// title ArrayList children , 。
private class Group {
public String title;
public ArrayList children;
// 。
@Override
public String toString() {
String str = " " + title + ": ";
for (int i = 0; i < children.size(); i++) {
str += children.get(i) + " ";
}
return str;
}
}
public static void main(String args[]) {
Test t = new Test();
t.find();
t.print();
}
}
結果出力:
A: A@0 A@1
B: B@2
C: C@3 C@4
D: D@5 D@6 D@7