第一题
解题思路:
明确排序规则,由排序规则写出匿名函数
class Solution
{
public:
int hardestWorker(int num, vector<vector<int>>& logs)
{
int n=logs.size();
for(int i=n-1;i;i--)
logs[i][1]-=logs[i-1][1];
//logs[i][1]的含义修改为完成任务i需要的时长
sort(logs.begin(),logs.end(),
[](vector<int> a,vector<int> b)
{
if(a[1]!=b[1]) return a[1]>b[1];//若时长不相等,则按时长从大到小排序
else return a[0]<b[0];//若时长相等,则按id从小到大排序
} );
return logs[0][0];//logs[0][0]即为答案
}
};
第二题
解题思路:
前缀异或
异或的性质:如果 a ^ b == c 成立,那么 a ^ c == b 与 b ^ c == a 均成立
数组arr0满足以下条件:
arr0[i] == arr[0] ^ arr[1] ^ arr[2] ^ arr[3] ^ …… ^ arr[i]
根据题意则有:
arr[0] == pref[0] == arr0[0]
当i大于或等于1时,arr[i] == arr0[i - 1] ^ pref[i]
class Solution
{
public:
vector<int> findArray(vector<int>& pref)
{
int n=pref.size();
vector<int> arr;
vector<int> arr0;
arr.push_back(pref[0]);
arr0.push_back(pref[0]);
for(int i=1;i<n;i++)
{
arr.push_back(arr0[i-1]^pref[i]);
arr0.push_back(arr0[i-1]^arr[i]);
}
return arr;
}
};