LeetCode 29 차 격주 전, 195 차 전 부분 해제
교묘 한 해석.
class Solution {
public:
int longestSubarray(vector<int>& a) {
int ans = 0, n = a.size();
vector<int> a1,a2;
a1.resize(n);
a1[0] = a[0];
a2.resize(n);
a2[n-1] = a[n-1];
for(int i=1;i<n;i++){
if(a[i]) a1[i] = a1[i-1]+1;
}
for(int i=n-2;i>=0;i--){
if(a[i]) a2[i] = a2[i+1]+1;
}
for(int i=0;i<n;i++){
int s1,s2;
if(i==0) s1 = 0;
else s1 = a1[i-1];
if(i==n-1) s2 = 0;
else s2 = a2[i+1];
ans = max(ans,s1+s2);
}
return ans;
}
};
4. 567917. 미끄럼 창: 최대 0 개 만 있 는 창 을 유지 합 니 다
class Solution {
public:
int longestSubarray(vector<int>& a) {
int l=0,r=0,n=a.size(),cnt=0,ans = 0;
while(l<n){
while(r<n && (a[r] || cnt==0)){
if(a[r]==0) cnt++;
r++;
}
ans = max(ans,r-l-1); //
if(a[l++]==0) cnt--;
}
return ans;
}
};
1496. 경로 가 교차 하 는 지 여 부 를 제목 의 뜻 에 따라 모 의 하면 된다.
class Solution {
public:
typedef pair<int,int> P;
set<P> vis;
bool isPathCrossing(string path) {
vis.insert(make_pair(0,0));
int x =0,y = 0;
for(char c:path){
if(c=='N'){
y++;
}else if(c=='E'){
x++;
}else if(c=='S'){
y--;
}else{
x--;
}
P nP = make_pair(x,y);
if(vis.count(nP)){
return 1;
}
vis.insert(nP);
}
return 0;
}
};
1497. 배열 이 k 에 의 해 제 거 될 수 있 는 지 확인 합 니 다. 정수 배열 arr 와 정수 k 를 드 리 겠 습 니 다. 그 중에서 배열 의 길 이 는 짝수 이 고 값 은 n 입 니 다.모든 숫자의 합 이 k 로 나 눌 수 있 도록 배열 을 n / 2 쌍 으로 나 누 어야 합 니 다.이러한 분 법 이 존재 한다 면 True 로 돌아 가세 요.그렇지 않 으 면 false 로 돌아 갑 니 다.
이산 수학 에서 의 모 n 잉여 류 집합, 즉 Z k = {[0], [1],..., [k - 1]} Z 고찰k = \ {[0], [1],..., [k - 1] \ \} Zk = {[0], [1],..., [k - 1]} 그 중 [x] k [x]k [x] k 는 x x x 모드 k k 와 같은 요소 의 집합 을 나타 낸다.이 사고방식 에 따라 각 잉여 류 의 개 수 를 통계 하면 되 고 그 다음 에 일일이 맞 출 수 있다.
class Solution {
public:
bool canArrange(vector<int>& arr, int k) {
vector<int> m(k,0);
for(int x:arr){
m[ (x%k+k)%k ]++;
}
if(m[0]&1){
return false;
}
for(int i=1;i<=k/2;i++){
if(m[i]!=m[k-i]){
return false;
}
}
return true;
}
};
1498. 조건 을 만족 시 키 는 하위 시퀀스 의 수량 문제: 정수 배열 nums 와 정수 target 을 드 립 니 다.nums 에서 최소 요소 와 최대 요소 의 합 이 target 보다 작 거나 같은 비 빈자리 시퀀스 의 수 를 통계 하고 되 돌려 주 십시오.
하나의 서열 에는 모두 2n 2 ^ n 2n 의 하위 서열 이 있다.그러나 모든 하위 서열 의 최대 치 와 최소 치 의 합 은 제한 이 있어 단조 로 운 것 이 분명 하 다.먼저 순서 (순서 가 질서 가 있다 고 하지만 제목 의 뜻 은 실제 적 으로 한 부분 집합 을 꺼 내 는 것) 를 배열 한 다음 에 두 바늘 (l, r, l, r, l, r) 의 사상 으로 l l l l 은 어 렸 을 때 부터 매 거 진 것 이다. 비 어 있 기 때문에 l l l 에 대응 하 는 요 소 를 선택 한 다음 에 문제 의 요 구 를 만족 시 키 는 가장 큰 r r r 를 조정 해 야 한다. 이 부분 집합 은 모두 요 구 를 만족 시 키 는 것 이다.개 수 는 2 r - l 2 ^ {r - l} 2r - l 이다.제기 할 만 한 것 은 단조 성 때문에 r r 는 필요 하지 않 아 도 매번 n - 1 n - 1 n - 1 에서 왼쪽으로 이동 할 수 없다. 그렇지 않 으 면 시간 복잡 도 는 선형 이 아니다.
class Solution {
public:
int numSubseq(vector<int>& nums, int target) {
int MO = 1e9+7,n = nums.size();
vector<int> mi(n+1,0);
mi[0] = 1;
for(int i=1;i<=n;i++){
mi[i] = (mi[i-1]<<1) % MO;
}
sort(nums.begin(),nums.end());
int l,r = n-1,ans = 0;
for(l=0;l<n;l++){
while(l<=r && nums[l]+nums[r]>target ) r--;
if(l>r) break;
ans = (ans+mi[r-l])%MO;
}
return ans;
}
};
1499. 부등식 최대 치 슬라이딩 창 + set 유지보수 창 내 최대 치 를 만족 시 킵 니 다.좌표 x 의 단조 성 으로 인해 실제 적 으로 조건 을 만족 시 키 는 창 안의 최대 치 를 찾 는 것 입 니 다.
class Solution {
public:
int findMaxValueOfEquation(vector<vector<int>>& a, int k) {
int ans = -1e9,l = 0,r = 0,n = a.size();
multiset<int> vis;
while(l<n){
while(r<n && a[r][0]-a[l][0]<=k){
vis.insert(a[r][0]+a[r][1]);
r++;
}
vis.erase(vis.find(a[l][0]+a[l][1]));
if(vis.size()) ans = max(ans,*vis.rbegin()+a[l][1]-a[l][0]);
l++;
}
return ans;
}
};
미끄럼 창 최대 값 은 단조 로 운 대기 열 로 해결 할 수 있 습 니 다. 시간 복잡 도 O (n) O (n) O (n).문제 의 유사 성 때문에 자 연 스 럽 게 단조 로 운 대열 로 해결 할 수 있다.
class Solution {
public:
int findMaxValueOfEquation(vector<vector<int>>& points, int k) {
deque<int> dq;
int ans = -1e9,n = points.size(),l=0,r=0;
while(l<n){
while(r<n && points[r][0]-points[l][0]<=k){
int val = points[r][0]+points[r][1];
while(dq.size() && dq.back()<val) dq.pop_back();
dq.push_back(val);
r++;
}
if(dq.front() == points[l][1]+points[l][0]) dq.pop_front();
if(dq.size()) ans = max(ans,points[l][1]-points[l][0]+dq.front());
l++;
}
return ans;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.