2020滴滴算法笔试第一题:

2020滴滴算法笔试第一题:
如有错误请都多指出~暂测都可以
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/*
 * 一个运算式,不改变运算符的位置,将运算式中的数字进行排序,不改变原结果
	第一行数字是运算式中数字的个数
	第二行是运算式,各符号之间以空格间隔
	如:
6
3 + 2 + 1 - -4 * -5 + 1
	输出应该是
1 + 2 + 3 - -5 * -4 + 1
 */
/*
 * 连加、连减、连乘、连除
 */
public class Main {

	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner scanner = new Scanner(System.in);
		int n = Integer.parseInt(scanner.nextLine());
		String line = scanner.nextLine();
		String[] input = line.split(" ");

		ArrayList<Integer> nums = new ArrayList<Integer>();
		StringBuilder f = new StringBuilder();
		f.append("+");
//		char[] result = new char[n+n-1];
		for(int i = 0;i<input.length;i++) {
			if(i%2!=0) {
				f.append(input[i]); //存储符号
			}else {
				nums.add(Integer.parseInt(input[i])); //存储所有的符号和数字
			}
		}
		String fu = f.toString();
		
		int l = 0, r = 0;//定义两个指针,确定需要排序的区间
		int index = 0;
		while(index<f.length()) {
			if(fu.charAt(index)=='+') {
				l = index;
				index+=1;
				while((index< n-1) && fu.charAt(index)=='+') {
					index+=1;
				}
				if(index==n-1 || (index<n-1 && fu.charAt(index)=='-') ){
					r = index; //不包含r 位置的元素
				}else {
					r = index-1;
				}
				Collections.sort(nums.subList(l, r));
			}else if(fu.charAt(index)=='-') {
				l = index;
				index+=1;
				while((index< n-1) && fu.charAt(index)=='-') {
					index+=1;
				}
				if(index==n-1 || (index<n-1 && fu.charAt(index)=='+') ) {
					r = index; //不包含r 位置的元素
				}else {
					r = index-1;
				}
				Collections.sort(nums.subList(l, r));
				
			}else if(fu.charAt(index)=='*') {
				l = index-1;
				index+=1;
				while((index< n-1) && fu.charAt(index)=='*') {
					index+=1;
				}
				r = index; //不包含r 位置的元素
				Collections.sort(nums.subList(l, r));
				
			}else if(fu.charAt(index)=='/') {
				l = index-1;
				index+=1;
				while((index< n-1) && fu.charAt(index)=='/') {
					index+=1;
				}
				r = index; //不包含r 位置的元素
				Collections.sort(nums.subList(l, r));
			}
		}	
		StringBuilder out = new StringBuilder();
		out.append(nums.get(0));
		for(int i = 1;i < nums.size();i++) {
			out.append(" ").append(fu.charAt(i)).append(" ").append(nums.get(i));
		}
		System.out.println(out.toString().trim());

	}
}


#滴滴##笔试题目##题解#
全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务