除法求值题目描述给出方程式 A / B k, 其中 A 和 B 均为代表字符串的变量 k 是一个浮点型数字。根据已知方程式求解问题并返回计算结果。如果结果不存在则返回 -1.0。示例 :给定 a / b 2.0, b / c 3.0问题: a / c ?, b / a ?, a / e ?, a / a ?, x / x ?返回 [6.0, 0.5, -1.0, 1.0, -1.0 ]输入为: vectorpairstring, string equations, vector values, vectorpairstring, string queries(方程式方程式结果问题方程式) 其中 equations.size() values.size()即方程式的长度与方程式结果长度相等程式与结果一一对应并且结果值均为正数。以上为方程式的描述。 返回vector类型。基于上述例子输入如下equations(方程式) [ [“a”, “b”], [“b”, “c”] ],values(方程式结果) [2.0, 3.0],queries(问题方程式) [ [“a”, “c”], [“b”, “a”], [“a”, “e”], [“a”, “a”], [“x”, “x”] ].解题思路比如求a/c在链表中有没有a如果没有则返回-1如果有比如这里有a,b。则接下来求b/c的值然后乘以a/b的值。如果是b,a形式的则接下来也是求b/c然后乘以b/a的值。class Solution { public: vectordouble calcEquation(vectorvectorstring equations, vectordouble values, vectorvectorstring queries) { if(equations.size() 0 || equations.size() ! values.size()) return {}; vectordouble res; for(int i 0; i queries.size(); i){ vectorint visite(values.size(),1); res.push_back(calcEquationHelp(equations,values,queries[i],visite)); } return res; } double calcEquationHelp(vectorvectorstring equations, vectordouble values,vectorstring query,vectorint visite){ double res -1; for(int i 0; i equations.size(); i){ if(visite[i] 0) continue; visite[i] 0; if(equations[i][0] query[0] equations[i][1] query[1]) return values[i]; if(equations[i][0] query[1] equations[i][1] query[0]) return 1.0/values[i]; if(query[0] query[1] (equations[i][0] query[0] || equations[i][1] query[0])) return 1.0; if(equations[i][0] query[0]){ double temp calcEquationHelp(equations,values,{equations[i][1],query[1]},visite); if(temp ! -1) return temp * values[i]; } else if(equations[i][1] query[0]){ double temp calcEquationHelp(equations,values,{equations[i][0],query[1]},visite); if(temp ! -1) return temp * 1.0/values[i]; } visite[i] 1; } return res; } };根据身高重建队列题目描述假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示其中h是这个人的身高k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]解题思路首先根据身高从大到小排序如果身高相同则k小的数在前面排序后数组为[7,0] ,[7,1],[6,1],[5,0],[5,2],[4,4]然后从第一个元素开始进行插入操作插入的位置即为k对应的位置。class Solution { private: static bool cmp(vectorint a, vectorint b){ return a[0] b[0] || a[0] b[0] a[1] b[1]; } public: vectorvectorint reconstructQueue(vectorvectorint people) { if(people.size() 0) return {}; sort(people.begin(),people.end(),cmp); vectorvectorint res; res.push_back(people[0]); for(int i 1; i people.size(); i){ if(people[i][1] res.size()) res.push_back(people[i]); else res.insert(res.begin() people[i][1],people[i]); } return res; } };