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, ....}
}
第三步便可通过第一组数中相同数的下标到第二组数中相应的值
但现在问题的难点在第二该如何实现? 展开
得到如下结果:
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, ....}
}
第三步便可通过第一组数中相同数的下标到第二组数中相应的值
但现在问题的难点在第二该如何实现? 展开
4个回答
展开全部
其实很简单,完全不用用集合,只要一找好就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
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
}
}
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");
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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("]");
}
}
}
}
{
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("]");
}
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
组排序可以解决。代码你可以搜下。
追问
谢谢你,能不能详细介绍一下...…^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询