11.17
阿新 • • 發佈:2020-11-17
1486. 陣列異或操作
難度簡單21
給你兩個整數,n
和 start
。
陣列 nums
定義為:nums[i] = start + 2*i
(下標從 0 開始)且 n == nums.length
。
請返回 nums
中所有元素按位異或(XOR)後得到的結果。
示例 1:
輸入:n = 5, start = 0
輸出:8
解釋:陣列 nums 為 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
"^" 為按位異或 XOR 運算子。
示例 2:
輸入:n = 4, start = 3 輸出:8 解釋:陣列 nums 為 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
示例 3:
輸入:n = 1, start = 7
輸出:7
示例 4:
輸入:n = 10, start = 5
輸出:2
提示:
1 <= n <= 1000
0 <= start <= 1000
n == nums.length
解答:
class Solution { public: int xorOperation(int n, int start) { int res = start; for(int i = 1; i < n; i++){ res = res ^ (start + 2 * i); } return res; } };
57. 插入區間
難度困難325
給出一個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入一個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入:intervals = [[1,3],[6,9]], newInterval = [2,5]
輸出:[[1,5],[6,9]]
示例 2:
輸入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] 輸出:[[1,2],[3,10],[12,16]] 解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。
解答:和區間合併思路一致
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& a, vector<int>& b) {
if(!a.size()){
a.push_back(b);
return a;
}
if(!b.size())return a;
a.push_back(b);
sort(a.begin(), a.end());
int l = a[0][0], r = a[0][1];
vector<vector<int>>res;
for(int i = 1; i < a.size(); i++){
if(a[i][0] > r){
res.push_back({l, r});
l = a[i][0], r = a[i][1];
}
else r = max(r, a[i][1]);
}
res.push_back({l, r});
return res;
}
};
1030. 距離順序排列矩陣單元格
難度簡單61
給出 R
行 C
列的矩陣,其中的單元格的整數座標為 (r, c)
,滿足 0 <= r < R
且 0 <= c < C
。
另外,我們在該矩陣中給出了一個座標為 (r0, c0)
的單元格。
返回矩陣中的所有單元格的座標,並按到 (r0, c0)
的距離從最小到最大的順序排,其中,兩單元格(r1, c1)
和 (r2, c2)
之間的距離是曼哈頓距離,|r1 - r2| + |c1 - c2|
。(你可以按任何滿足此條件的順序返回答案。)
示例 1:
輸入:R = 1, C = 2, r0 = 0, c0 = 0
輸出:[[0,0],[0,1]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1]
示例 2:
輸入:R = 2, C = 2, r0 = 0, c0 = 1
輸出:[[0,1],[0,0],[1,1],[1,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2]
[[0,1],[1,1],[0,0],[1,0]] 也會被視作正確答案。
示例 3:
輸入:R = 2, C = 3, r0 = 1, c0 = 2
輸出:[[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2,2,3]
其他滿足題目要求的答案也會被視為正確,例如 [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]]。
提示:
1 <= R <= 100
1 <= C <= 100
0 <= r0 < R
0 <= c0 < C
解答:直接暴力排序
class Solution {
public:
vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
vector<vector<int>>res;
for(int i = 0; i < R; i++)
for(int j = 0; j < C; j++)res.push_back({i, j});
sort(res.begin(), res.end(), [&](vector<int>&a, vector<int>&b){
return abs(a[0] - r0) + abs(a[1] - c0) < abs(b[0] - r0) + abs(b[1] - c0);
});
return res;
}
};