第一题:6233. 温度转换
思路:简单转换即可
class Solution { public: vector<double> convertTemperature(double celsius) { vector<double> res; res.push_back(celsius + 273.15); res.push_back(celsius * 1.80 + 32.00); return res; } };
思路:可以想一下最大公约数和最小公倍数之间的关系,例如a,b两个数,将a拆成mc,b拆成nc,则c为a,b的最大公约数,那么最小公倍数就是m * n * c
看代码,两层循环,第一层遍历数组的每一个数,有大于k的直接跳过,第二层循环从i开始,求最大公约数,然后将l和g的倍数乘以第二层遍历的元素,如果l==k则说明从i到j的子数组内的最大公倍数1为k,即满足题目要求res++,若l>k退出即可
class Solution { public: int subarrayLCM(vector<int>& nums, int k) { int n = nums.size(); int res = 0; for (int i = 0; i < n; i++) { if(nums[i] > k) continue; long long l = nums[i]; for (int j = i; j < n; j++) { long long g = gcd(l, nums[j]); l = l / g * nums[j]; if (l == k) res++; else if (l > k) break; } } return res; } };
思路:将二叉树层序遍历到二维数组里,然后遍历每一层求交换次数累加到答案即可。做周赛时没想到怎么计算交换次数,这里新开一个数组,然后对数组进行排序并用哈希表记录值和下标,然后遍历一遍原数组将每个元素交换的应在的位置,累加次数统计起来即可
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int sum(vector<int> &A) { // 求每个元素的目标位置 vector<int> B = A; sort(B.begin(), B.end()); unordered_map<int, int> mp; for (int i = 0; i < B.size(); i++) mp[B[i]] = i; int ret = 0; for (int i = 0; i < A.size(); i++) { // 不断将 A[i] 交换到目标位置,直到 A[i] = B[i] // 注意别写成 if 了 while (A[i] != B[i]) { swap(A[i], A[mp[A[i]]]); ret++; } } return ret; } int minimumOperations(TreeNode* root) { int res = 0; //将二叉树层序遍历到二维数组里 queue<TreeNode*> que; if (root != NULL) que.push(root); vector<vector<int>> ans; while (!que.empty()) { int size = que.size(); vector<int> vec; for (int i = 0; i < size; i++) { TreeNode* node = que.front(); que.pop(); vec.push_back(node->val); if (node->left) que.push(node->left); if (node->right) que.push(node->right); } ans.push_back(vec); } for (auto &A : ans) res += sum(A); return res; } };