题目描述:选择数组最小的一个重复值,删除该重复值,将它后面的值加*2,并向前移动,数组长度-1 输入1:5 2 2 1 1 1 输出1:4 2 1 输入2:5 5 5 5 5 4 输出2:20 4
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String []args){
/*
输入数据
*/
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int []arr=new int [n];
for(int i=0;i<n;i++){
arr[i]=scan.nextInt();
}
int len=arr.length;
HashMap<Integer,Integer>map=new HashMap<>();//记录重复数据
int j=1;
boolean b=true;
while(b){
map.clear();
/*
将重复数据加入map中
*/
for (int i = 0; i < len - 1; i++) {
if (arr[i] != arr[i + 1]) {
continue;
} else {
if (!map.containsValue(arr[i])) {
map.put(j, arr[i]);
j++;
}
}
}
/*
当map存有数据时,取最小的值
*/
if (map.size()!=0){
int min = map.get(1);
for (int i = 1; i <=map.size(); i++) {
if (min > map.get(i)) {
min = map.get(i);
}
}
for (int i = 0; i < len-1; i++) {
if (arr[i] == min) {
arr[i + 1] = 2 * arr[i + 1];
for (int k = i; k < len-1 ; k++) {
arr[k] = arr[k + 1];
}
len=len-1;
j=1;
break;
}
}
}else{
b=false;
}
}
for(int i=0;i<len;i++){
System.out.println(arr[i]);
}
}
}
全部评论
(0) 回帖