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());

	}
}


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

相关推荐

2025-12-12 19:58
哔哩哔哩_产品运营
跟同事聊天时候,同事说“你刚来时候blabla”,突然意识到自己已经正式工作一年多了!就这么从脆皮内耗大学生逐渐磨练成厚血条(厚脸皮)工位主理人。秋招简历当然也是投了不少份,但总有一些机会要留给自己的白月光,比如阿B,说说我秋招选择阿B的理由吧:1.&nbsp;“为爱发电”:说来兴趣真的是初心,阿B在手机陪我看了那么多番剧vlog学习视频,当然想和它距离更近一些。来了之后发现,B站重要活动要专门走内宣是有原因的,身边的六级大佬绝对不在少数。2.&nbsp;实习体验感拉满:嗯对其实等不到正式工作就先来实习体验了。实习期在一个非常好的组,大家都很年轻氛围超好,做事情讲背景、讲逻辑不会只丢脏活累活。平时聊得来,工作起来也能快速打配合,项目完成时候所有人都成就感满满。再说说来正式工作之后的体验感:1.&nbsp;校招生mentor文化很需要:在阿B每个校招生入职都是会有一位mentor的,不会让大家有刚工作人生地不熟就孤苦一人挑大梁的感觉。很幸运我的mt人真的超好,耐心温柔业务能力又很强。常常在对需求听她帮我说话时看着她身上闪耀的光芒想要流泪。有mt的话landing期会顺畅很多。公司也会安排一些活动帮助mentor和mentee增进感情。2.小动物们和各类活动是回血剂:工作起来当然难免遇到一些磕磕磨磨,但是压力大时候转头看到想悄悄溜过的小猫摸上一把,真的会治愈不少。还有节假日的各种活动和扫楼活动,真的会给上班增加动力。最后上图!没有任何工作会让人一直开心吧,但阿B你在照顾员工心情这一块儿做得真的很不错。
哔哩哔哩公司福利 915人发布
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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