`

Facebook&Uber interview - Eval Math Expression

 
阅读更多

题目就是计算表达式  1+2*3+4 = 11可以去搜parse mathematical expression,不考虑括号

 

Solution: 

use two arrays to store numbers and signs.

    nums = [1,2,3,4]
    signs = [+, *, +]
scan signs, when we meet  * or /,  and change * or / into +, corresponding nums changed to  [0, a*b] or [0, a/b]. for the example:
    nums  = [1,0,6,4]
    signs = [+,+,+]. 
then do (zigzag) sum.

public int calcExpression(String expr) {
	//正则表达式,运算符得escape,并且用[]包裹,表示或;否则会表示"+-*/"四个都匹配才行
	String[] digits = expr.split("[\\+\\-\\*\\/]");
	//[, +, *, -, /], 第一个是leading empty string, trailing empty string会自动去掉,而头部的不会
	String[] ops = expr.split("\\d+"); // 或者下面这种做法,移除第一个数字
//	String[] ops = expr.replaceFirst("\\d+", "").split("\\d+");
	
	int n = digits.length;
	int[] nums = new int[n];
	for(int i=0; i<n; i++) {
		nums[i] = Integer.valueOf(digits[i]);
	}
	for(int i=1; i<ops.length; i++) {//因为第0项是空字符串,所以从第一项开始
		if(ops[i].equals("*")) {
			nums[i] = nums[i-1] * nums[i];
			nums[i-1] = 0;
		} else if(ops[i].equals("/")) {
			nums[i] = nums[i-1] / nums[i];
			nums[i-1] = 0;
		} else if(ops[i].equals("-")) {
			//不能减,因为后面有可能是*/运算,比-的优先度高,所以要变成负数的加法,这样不影响优先级
			nums[i] = -nums[i]; 
		}
	}
	int sum = 0;
	for(int i=0; i<n; i++) {
		sum += nums[i];
	}
	return sum;
}

  

Solution 2:

可以用Shunting-Yard先转换成逆波兰表达式,然后再求值,这种方法比较通用,但是实现起来可能要花点时间。具体代码见本博客的如下文章。

http://yuanhsh.iteye.com/blog/2177104

分享到:
评论

相关推荐

    flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar

    # 解压命令 tar -zxvf flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar.tar.gz # 介绍 用于CDH部署 Flink所依赖的jar包

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

    flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip

    《Flink Shaded Hadoop 2 Uber Jar:深入解析与应用》 Apache Flink 是一个流行的开源大数据处理框架,而 `flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip` 文件是针对 Flink 优化的一个特殊版本的 Hadoop 库。这...

    flink-shaded-hadoop-2-uber-2.6.5-10.0.zip

    《Flink与Hadoop的深度整合:flink-shaded-hadoop-2-uber-2.6.5-10.0.zip详解》 在大数据处理领域,Apache Flink 和 Apache Hadoop 是两个不可或缺的重要组件。Flink作为一个实时流处理框架,以其高效的事件驱动和...

    hive-jdbc-uber-2.6.5.jar

    hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" &gt; "Driver Manager...") and hit the ...

    hive-jdbc-uber-2.6.5.0-292.jar

    《Hive JDBC Uber Jar:2.6.5.0-292版本解析与应用》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于存储、查询和分析大规模数据集。Hive JDBC(Java Database Connectivity)是Hive提供的一种...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    标题中的"**hive-jdbc-uber-2.6.5.0-292.jar**"是一个Uber(也称为Shaded)JAR文件,它集成了Hive JDBC驱动的所有依赖项。Uber JAR的目的是为了方便部署,因为它将所有必需的库合并到一个单一的文件中,避免了类路径...

    flink-shaded-hadoop-2-uber-2.7.2-10.0.jar

    Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uber

    flink-shaded-hadoop-2-uber-2.7.2-11.0.jar

    flink-shaded-hadoop-2-uber-2.7.2-11.0.jar 是flink1.11集成hadoop2.7.2的jar依赖。

    flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar.tar.gz

    为解决这个问题,Flink社区提供了"flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-5.6.5-9.0.jar"这样的兼容包,这是一个"uber jar",也称为fat jar,它包含了Flink对Hadoop 3.x的依赖,并进行了重打包处理,以避免类...

    hive-jdbc-uber-2.6.5.0-292.zip

    标题中的“hive-jdbc-uber-2.6.5.0-292.zip”指的是Hive JDBC驱动的Uber版本,版本号为2.6.5.0-292。Uber JAR是一种包含所有依赖的单一JAR文件,便于分发和使用,特别是对于连接工具如DataGrip这样的集成开发环境...

    hive-jdbc-uber-2.6.5.0-292.jar驱动

    Hive JDBC Uber 2.6.5.0-292驱动是Apache Hive与Java数据库连接(JDBC)之间的桥梁,允许用户通过编程语言(如Java、Python等)或者数据库管理工具(如Dbeaver)与Hive进行交互。这个驱动程序集成了所有必要的依赖,...

    flink-shaded-hadoop-2-uber-2.8.3-10.0.jar

    当前的flink版本是一个纯净的版本,如果需要依赖其他系统(例如咱们当前flink的相关数据都存储到了hdfs),则需要添加相应的jar包 下载完成后上传到${FLINK_HOME}/lib/目录下

    hive-jdbc-uber-2.6.5.0-292.rar

    hive客户端工具DBever连接时所使用的驱动,hive-jdbc-uber-2.6.5.0-292.jar,hive-jdbc-uber-2.6.5.0-292.jar,hive-jdbc-uber-2.6.5.0-292.jar

    flink-shaded-hadoop-2-uber-2.7.4-11.0.jar

    hadoop版本2.7.4,flink 版本1.11,官网没有编译好的flink-shaded-hadoop-2-uber-2.7.4-11.0.jar,自己编译成功的jar,可以直接放到flink下lib目录下即可

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    《Hive JDBC Uber 3.1.2与Yanagishima:Kerberos环境下的即席查询解决方案》 在大数据处理领域,Apache Hive作为一款强大的数据仓库工具,被广泛用于存储、管理和分析大规模结构化数据。而Hive JDBC是连接Hive与...

    flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar(jar包).rar

    Flink jar包,官网下载很慢,有需要的自行下载 Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink...

Global site tag (gtag.js) - Google Analytics