第二天
3.数据库:超过经理收入的员工
+----+-------+--------+-----------+
| Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+----+-------+--------+-----------+
问题:如何查询?
通过ManagerId与Id的表与表的对应关系根据笛卡尔积建立组合表s
通过Employee表的ManagerId与组合表s中的Id匹配关联
SELECT Name AS 'Employee'//创建Name的临时表Employee
Employee AS a,//创建当前表的临时表a
Employee AS b//创建笛卡尔积后表的临时表b
WHERE a.ManagerId = b.Id//两表对应关联通过ManagerId与另外一个表Id
AND a.Salary>b.Salary;
4.算法:找出所有子集的异或总和再求和
问题:不知道如何求,看答案是回溯法,怎么用,思路在哪?
class solution{
int res = 0;
public int twoXORsum(int nums){
if(num.length ==0) return nums[0];
dfs(nums,0,0);
return res;
}
public void dfs(int nums[],int i,int XOR_sum){
if(i==nums.length){
res +=XOR_sum;
return;}
dfs(nums,i+1,XOR_sum^nums[i]);
dfs(nums,i,XOR_sum);}
}
总结:数据库:熟悉通过外键组合两个表通过关键字AS来建立临时表
算法:不清楚dfs回溯法如何用,为什么使用回溯