该文章介绍了如何使用栈实现一个能够计算包含加减乘法和括号的整数表达式的计算器。核心思路是利用两个栈:一个存储数字(nums),另一个存储运算符(ops)。算法遍历表达式字符串,将数字压入nums栈,将运算符压入ops栈。遇到左括号直接压入ops栈,遇到右括号则计算ops栈内运算符直到遇到左括号。在压入新运算符之前,会先计算ops栈内优先级高于或等于当前运算符的运算符。最终,将剩余的运算符依次计算,得到表达式的结果。代码通过HashMap定义了运算符的优先级,并实现了计算函数calc,以及判断字符是否为数字的辅助函数isNumber。该算法保证了O(n)的时间复杂度和O(n)的空间复杂度。

该文章介绍了如何解决NowCoder上的NC31题“第一个只出现一次的字符”。题目要求在给定的字符串中找到第一个只出现一次的字符,并返回其位置,若不存在则返回-1。文章提供了一种使用HashMap实现的解决方案,该方案首先遍历字符串,统计每个字符出现的次数,然后再次遍历字符串,查找第一个出现次数为1的字符。该方案满足题目要求的时间复杂度O(n)和空间复杂度O(n)。文章还提供了Java代码示例和两个测试用例,分别输入“google”和“aa”来演示该算法的正确性。

该文章介绍了一个大数乘法问题的解法。题目要求以字符串形式读入两个可能长达1000位的非负整数,计算它们的乘积并以字符串形式返回结果。由于数值远超基本数据类型范围,直接使用Java的BigInteger类实现高精度乘法是最简洁有效的方式。解法中,将输入字符串转换为BigInteger对象,调用其multiply方法完成运算,再将结果转回字符串返回。该方法时间复杂度为O(n²),空间复杂度为O(n),满足题目要求,并通过示例验证了正确性,如"11"×"99"="1089","1"×"0"="0"。代码简洁,利用了Java标准库的高精度计算能力。