滴滴笔试求解

import java.util.*;
public class Main9 {

    public static void sort(ArrayList<Integer> l,int low,int high){
        int n=high-low+1; //几个数字
        int temp;
        for(int i=0;i<n-1;i++){
            for(int j=low;j<=high-i-1;j++){
                if(l.get(j).intValue()>l.get(j+1).intValue()){ //?
                    temp=l.get(j);
                    l.set(j,l.get(j+1));
                    l.set(j+1,temp);
                }
            }
        }
        
    }
    

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		
		
		while(in.hasNext()) {
			int n=in.nextInt();
			if(n==1) {
				System.out.print(in.next());
				return;
			}
            
            ArrayList<Integer> shuzi=new ArrayList<>();
            ArrayList<String> fuhao=new ArrayList<>();
            ArrayList<Boolean> canSwap=new ArrayList<>(); //符号两边数是否可以交换

            int index=1;
            for(int i=0;i<n;i++){
                shuzi.add(Integer.parseInt(in.next()));
                if(i<n-1){
                    fuhao.add(in.next());
                }
            }
//            System.out.println(shuzi);
//            System.out.println(fuhao);
            for(int i=0;i<n-1;i++) {
            	canSwap.add(false);
            }
            
            //初始化canSwap
            for(int i=0;i<n-1;i++) {
            	String now=fuhao.get(i);
            	if(now.equals("+")) {
            		
            		if(i==0) {
            			if(i+1<=n-2) { //下一个符号存在
            				String next=fuhao.get(i+1);
            				if(now.equals("+")||now.equals("-")) {
            					canSwap.set(i, true);
            				}
            			}else {
            				canSwap.set(i, true);
            			}
            		}else {
            			String before=fuhao.get(i-1);
            			if(before.equals("+")) {  //前一个符号为加号
            				if(i+1<=n-2) { //下一个符号存在
                				String next=fuhao.get(i+1);
                				if(next.equals("+")||next.equals("-")) {
                					canSwap.set(i, true);
                				}
            				}else {
            					canSwap.set(i, true);
            				}
            			}
            		}
            		
            	}else if(now.equals("*")) {
            		if(i==0) {
            			canSwap.set(i, true); 
            		}else {
            			String before=fuhao.get(i-1);
            			if(!before.equals("/")) {
            				canSwap.set(i, true);
            			}
            		}
            	}
            }
//            System.out.println(canSwap);
            
            int flag=0;
            int low=0;
            int high=0;
            for(int i=0;i<n-1;i++) {
            	boolean can=canSwap.get(i).booleanValue();
            	if(can) {
            		if(flag==0) {
            			low=i;
            			flag=1;
            		}
            		if(i==n-2) {
            			high=n-1;
            			sort(shuzi,low,high);
//            			System.out.println(shuzi);
            		}
            		
            	}else {
            		if(flag==1) {
            			flag=0;
            			high=i;
//            			System.out.println(low+" "+high);
            			sort(shuzi,low,high);
//            			System.out.println(shuzi);
            		}
            	}
            }
            
            for(int i=0;i<n-1;i++){
                System.out.print(shuzi.get(i)+" "+fuhao.get(i)+" ");
            }
            System.out.print(shuzi.get(n-1));
            
		}
	}

}

 

#滴滴##笔试题目#
全部评论
package didi; import java.util.Arrays; import java.util.Scanner; public class Fuhao {     public static void main(String[] args) {         // TODO Auto-generated method stub         Scanner sca = new Scanner(System.in);         int n = sca.nextInt();         // 符号数组和数字数组         String[] fuhao = new String[n - 1];         int[] num = new int[n];         // 获取元素         for (int i = 0; i < 2 * n - 1; i++) {             if (i % 2 == 0) {                 num[i / 2] = sca.nextInt();             } else {                 fuhao[(i - 1) / 2] = sca.next();             }         }         /*          * temp 暂存数组中发现的第一个“+” or “*”符号 二维数组存放biaohao[i][o]存放第i次发现“+” or “*”的起始位置          * biaohao[i][1]存放第i次发现“+” or “*”的截止位置 变量a++等效于 i++; flag 标志位          */         String temp = "";         int[][] biaohao = new int[n - 1][2];         int a = 0;         boolean flag = true;         // 获取第一个“+” or “*”         for (int i = 0; i < fuhao.length; i++) {             // 判断是不是满足可以交换字符前后的数字的条件             if (fuhao[i].equals("+") || fuhao[i].equals("*")) {                 // 当前字符与暂存字符不相符,则记录截至位置,标志位true下次循环便可记录初始位置                 if (fuhao[i].equals(temp)) {                     biaohao[a][1] = i - 1;                     flag = true;                     a++;                 }                 // 满足,存放当前字符,记录起始位置,标志位为false不再重复记录                 if (flag) {                     temp = fuhao[i];                     biaohao[a][0] = i;                     flag = false;                 }             } else {// 不满***换条件                 biaohao[a][1] = i - 1;                 flag = true;                 a++;// 数组行自增             }         }         // 排序         for (int i = 0; i < biaohao.length / 2; i++) {             // 截止位置-起始位置+2 例 :1+2+3             int[] sor = new int[biaohao[i][1] - biaohao[i][0] + 2];             sor = Arrays.copyOfRange(num, biaohao[i][0], biaohao[i][1] + 2);             Arrays.sort(sor);             System.arraycopy(sor, 0, num, biaohao[i][0], sor.length);         }         // 打印数组         for (int i = 0; i < 2 * n - 1; i++) {             if (i % 2 == 0) {                 System.out.print(num[i / 2] + " ");             } else {                 System.out.print(fuhao[(i - 1) / 2] + " ");             }         }     } }
点赞 回复 分享
发布于 2019-08-28 12:42

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务