纸牌52张,10张朝上,分成两堆,朝上数量一样, 盲人
∣
A
∣
=
10
,
∣
B
∣
=
42
\left|A\right| = 10, \left|B\right| =42
∣A∣=10,∣B∣=42
f
(
A
)
=
∣
{
x
∈
A
∣
x
朝上
}
∣
f\left(A\right) = \left|\left\{x \in A| x \text{朝上}\right\}\right|
f(A)=∣{x∈A∣x朝上}∣
f
(
A
)
=
x
,
f
(
B
)
=
10
−
x
f\left(A\right) = x, f\left(B\right) = 10-x
f(A)=x,f(B)=10−x
翻转
A
A
A,则
10
−
x
10-x
10−x朝上
14枚硬币最少称几下找到假币并且指出轻重
4下
顺带一提,只要找到假币但是不用知道轻重,也是4下
平面和点和射线
1)点到平面距离
2)过点作射线,已知射线方向向量,求和平面交点
https://blog.csdn.net/qq_39942341/article/details/134284201?spm=1001.2014.3001.5501
矩阵中固定块最大
给定大小
m
×
n
m\times n
m×n, 每个元素都是
1
,
0
,
−
1
1,0,-1
1,0,−1
找到和最大的大小为
h
×
w
h\times w
h×w的子矩阵
没找到完全一样的,找到了类似的题目
Leetcode1314. Matrix Block Sum
class Solution {
public:
vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
int m = mat.size(), n = mat[0].size();
int dp[105][105]={};
for(int i=1;i<=m;++i){
for(int j=1;j<=n;++j){
dp[i][j] = mat[i-1][j-1] + dp[i][j-1] + dp[i-1][j] -dp[i-1][j-1];
}
}
vector<vector<int> > ans;
for(int i=0;i<m;++i){
vector<int> temp;
for(int j=0;j<n;++j){
int r1 = max(i-k,0), r2 = min(i+k,m-1),c1=max(j-k,0),c2=min(j+k,n-1);
temp.push_back(dp[r2+1][c2+1]-dp[r2+1][c1]-dp[r1][c2+1]+dp[r1][c1]);
}
ans.push_back(temp);
}
return ans;
}
};
我当时的思路就是算2d前缀和然后枚举
时间复杂度
O
(
m
n
)
O\left(mn\right)
O(mn)
空间复杂度
O
(
m
n
)
O\left(mn\right)
O(mn)
数组加起来等于目标的对数
给定一个数组,找到
(
i
,
j
)
\left(i,j\right)
(i,j),使得
n
u
m
s
[
i
]
+
n
u
m
s
[
j
]
=
t
a
r
g
e
t
nums[i] + nums[j] = target
nums[i]+nums[j]=target,然后问有几对
说实话,这题没说
i
<
j
i<j
i<j,也没说
i
,
i
i,i
i,i算不算
我当时的思路是用map统计
一边遍历一边统计,比如说到了
i
i
i,就去找目前有几个
t
a
r
g
e
t
−
n
u
m
[
i
]
target-num[i]
target−num[i],加到答案里面
int search(vector<int>& a, int target){
int ans = 0;
map<int, int> mp;
for(int& c:a){
int temp = target - c;
auto it = mp.find(temp);
if(it != mp.end())ans += it->second;
++mp[c];
}
return ans;
}
时间复杂度
O
(
n
log
n
)
O\left(n\log n\right)
O(nlogn)
空间复杂度
O
(
n
)
O\left(n\right)
O(n)
小技巧:
如果有编程题,而且能看输出结果,并且能回头,前面有的题目可以直接后面验证一下放到前面