首页 > 广联达 7.29笔试-第二题分享
头像
W-M
编辑于 2020-07-30 11:05
+ 关注

广联达 7.29笔试-第二题分享

题目描述:选择数组最小的一个重复值,删除该重复值,将它后面的值加*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) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐