Java怎样快速分出一个数组中相同元素的下标,详细如下:

例如如下数组int[]temp={1,2,5,8,6,2,11,15,2,6,2,11,15,5,1,8,6};得到如下结果:1-->[0,14]2-->[1,5,8,1... 例如如下数组 int [] temp = {1,2,5,8,6,2,11,15,2,6,2,11,15,5,1,8,6};
得到如下结果:
1 --> [0,14]
2 --> [1,5,8,10]
5 --> [2,13]
6 --> [4,9,11]
....
对于这问题的解决方式,我个人有一想法,不知如何实现较好:
第一步将数组转换成如下状态的二维数组:
int [][] temp = {
{01,02,05,08,06,02,11,15,02,06,02,11,15,05,01,08,06},
{00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16}
}
第二步先对第一组数排序,然后第二组的数跟着第一组的数走,得到如下结果:
int[][] temp = {
{01,01,02,02,02,02,05,05,06,06, ....},

{00,14,01,05,08,10,02,13,04,09, ....}

}
第三步便可通过第一组数中相同数的下标到第二组数中相应的值

但现在问题的难点在第二该如何实现?
展开
 我来答
work4brains
推荐于2018-01-13 · TA获得超过469个赞
知道答主
回答量:198
采纳率:0%
帮助的人:167万
展开全部
其实很简单,完全不用用集合,只要一找好就print或组String,多馀的内存也可以省下

public class Run {

private final static int [] temp = {1,2,5,8,6,2,11,15,2,6,2,11,15,5,1,8,6};

public static void main(String[] args) {
Run r = new Run();
r.locateAllAndPrint();
}

private void locateAllAndPrint () {
for (int i = 0; i < temp.length; i++) {
int h = temp[i];
boolean repeated = false;
for (int j = 0; j < i; j++) {
if (temp[j] == h) {
repeated = true;
break;
}
}
if (!repeated) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j < temp.length; j++) {
if (h == temp[j]) {
sb.append(", ").append(j);
}
}
sb.delete(0, 2).insert(0, " --> [").insert(0, h).append(']');
System.out.println(sb.toString());
}
}
}
}

解释一下,第一个 j 的 loop是用来防止print重覆的数字
第二个 j 的 loop是用来组一串string,串好了才print,这样可以减少print的次数,delay也可以减少,当然,如果你喜欢的话,你可以直接print,不需要用stringbuffer
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
团买买
2013-03-18
知道答主
回答量:66
采纳率:0%
帮助的人:19.1万
展开全部
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Test {

public static void main(String[] args) {
int a[] = {5,6,15,5,3,5,6,11};
Map<Integer, Set<Integer>> map = new HashMap<>();
for(int i=0;i<a.length;i++){
if(map.get(a[i]) == null){
HashSet<Integer> set = new HashSet<>();
set.add(i);
map.put(a[i], set);
}else{
HashSet<Integer> set = (HashSet<Integer>)map.get(a[i]);
set.add(i);
}
}
Set<Entry<Integer, Set<Integer>>> set = map.entrySet();
Iterator<Entry<Integer, Set<Integer>>> it = set.iterator();
while(it.hasNext()){
Entry<Integer, Set<Integer>> entry = it.next();
System.out.print(entry.getKey()+"-->[");
Iterator<Integer> it2 = entry.getValue().iterator();
while(it2.hasNext()){
System.out.print(it2.next());
if(it2.hasNext())System.out.print(",");
}
System.out.print("]\n");
}
}
}
追问

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝风水晶灵
2013-03-18 · TA获得超过934个赞
知道小有建树答主
回答量:731
采纳率:0%
帮助的人:435万
展开全部
public class Test
{
public static void main(String args[])
{
int[] temp = {1,2,5,8,6,2,11,15,2,6,2,11,15,5,1,8,6};
for (int i = 0; i < temp.length - 1; i++)
{
if(temp[i] != 0)
{
System.out.print(temp[i] + " -->[" + i);
for (int j = i + 1; j < temp.length; j++)
{
if(temp[i] == temp[j])
{
System.out.print(", " + j);
temp[j] = 0;
}
}
System.out.println("]");
}
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dzz992805
2013-03-18
知道答主
回答量:37
采纳率:0%
帮助的人:8.9万
展开全部
组排序可以解决。代码你可以搜下。
追问
谢谢你,能不能详细介绍一下...…^_^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式