java算法 java算法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能用两个MAP吗? int[] arr = { 1, 2, 2, 1, 4, 3, 3, 4, 3 }; HashMap<Integer, Integer> m = new HashMap<Integer, Integer>(); // int count = 1; // 用来记录每个数字出现的次数 HashMap<Integer, Integer> repeatCount = new HashMap<Integer, Integer>(); for (int i = 0; i < arr.length; i++) { int tep = arr[i]; int count = 1; // 判定是否存在 if (repeatCount.containsKey(tep)) { count = repeatCount.get(tep) + 1; repeatCount.put(tep, count); } else { repeatCount.put(tep, 1); } System.out.print(tep * count); } 没想到用两个map。谢谢了 可以啊,你也用了一个map,没考虑的map现有的方法 public static void main(String[] args) { int [] arr = {1,2,2,2,4,3,3,4,3}; HashMap<Integer,Integer> m =new HashMap<Integer,Integer>(); int count=1; m.put(0,arr[0]); for (int i = 1; i < arr.length; i++) { int tep=arr[i]; for (int j = 0; j < i; j++) { if(tep!=arr[j]) { } else{ count ++; m.put(i, arr[i]*count); } } count=1; } Iterator<Integer> iter = m.keySet().iterator(); while (iter.hasNext()) { int key = iter.next(); int value = m.get(key); arr[key] = value; } System.out.println(m); for(int i=0;i<arr.length;i++){ System.out.print(arr[i] + " "); } } 你的算法复杂,完全没有必须用两个循环,下面是我的代码,可以满足你的要求:public static void main(String[] args) { int [] arr = {1,2,2,1,4,3,3,4,3};//{1,2,2,1,4,3,3,4,3,3,3}; int[] num = new int[arr.length]; Map<Integer,Integer> m = new HashMap<Integer,Integer>(); for(int i = 0 ; i < arr.length ; i++){ if( m.get(arr[i]) == null){ m.put(arr[i], 1); num[i] = arr[i]; }else{ int temp = m.get(arr[i]); m.put(arr[i], temp + 1); num[i] = arr[i] * (temp + 1); } } for (int i = 0 ; i < num.length ; i++){ System.out.print(num[i] + " "); } } 我看了你的代码,就是第二个for语句有问题,只要多余两个数他都会当做第二个,改了一下你的语句供参考for (int j = i+1; j < arr.length; j++) { if(tep!=arr[j]||tep==-1){ }else{ count ++; m.put(j, arr[j]*count); arr[j] = -1; } } int [] arr = {1,2,2,1,4,3,3,4,3};Map<Integer,Integer> m =new HashMap<Integer,Integer>();for (int i = 0; i < arr.length; i++) { if(m.containsKey(arr[i])) { m.put(arr[i], m.get(arr[i])+1); arr[i] = m.get(arr[i])*arr[i]; } else { m.put(arr[i], 1); }} 针对java中定义的 Vector<Double>变量 怎么来排序 Timer奇怪问题 DecimalFormat的几个问题 求助~!关于反编译的问题! 选择排序-- 如何实现窗口间的数据传递??? 如何将字符串类型的日期如yyyy-mm-dd HH:MM:SS转化为sql.Date类型 用了JBUILDER的布局管理器 jbuilder使用的若干问题 我要找tomcat,请大家帮忙 求教JSP怎么做上传和下载? 异常------求助啊
HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();
// int count = 1;
// 用来记录每个数字出现的次数
HashMap<Integer, Integer> repeatCount = new HashMap<Integer, Integer>();
for (int i = 0; i < arr.length; i++) {
int tep = arr[i];
int count = 1;
// 判定是否存在
if (repeatCount.containsKey(tep)) {
count = repeatCount.get(tep) + 1;
repeatCount.put(tep, count);
} else {
repeatCount.put(tep, 1);
}
System.out.print(tep * count);
}
没想到用两个map。谢谢了
int [] arr = {1,2,2,2,4,3,3,4,3};
HashMap<Integer,Integer> m =new HashMap<Integer,Integer>();
int count=1;
m.put(0,arr[0]);
for (int i = 1; i < arr.length; i++) {
int tep=arr[i];
for (int j = 0; j < i; j++) {
if(tep!=arr[j])
{ }
else{
count ++;
m.put(i, arr[i]*count);
}
}
count=1;
}
Iterator<Integer> iter = m.keySet().iterator();
while (iter.hasNext()) {
int key = iter.next();
int value = m.get(key);
arr[key] = value;
}
System.out.println(m);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i] + " ");
} }
int[] num = new int[arr.length];
Map<Integer,Integer> m = new HashMap<Integer,Integer>();
for(int i = 0 ; i < arr.length ; i++){
if( m.get(arr[i]) == null){
m.put(arr[i], 1);
num[i] = arr[i];
}else{
int temp = m.get(arr[i]);
m.put(arr[i], temp + 1);
num[i] = arr[i] * (temp + 1);
}
}
for (int i = 0 ; i < num.length ; i++){
System.out.print(num[i] + " ");
} }
改了一下你的语句供参考
for (int j = i+1; j < arr.length; j++) {
if(tep!=arr[j]||tep==-1){
}else{
count ++;
m.put(j, arr[j]*count);
arr[j] = -1;
}
}
int [] arr = {1,2,2,1,4,3,3,4,3};
Map<Integer,Integer> m =new HashMap<Integer,Integer>();
for (int i = 0; i < arr.length; i++) {
if(m.containsKey(arr[i])) {
m.put(arr[i], m.get(arr[i])+1);
arr[i] = m.get(arr[i])*arr[i];
} else {
m.put(arr[i], 1);
}
}