Untitled
Anonymous
plain_text
02/15/2026 4:36 AM
5.2 KB
53
Indexable
==========Q1===========
class Solution {
public:
vector<int> toggleLightBulbs(vector<int>& bulbs) {
vector<int> switch_(101,0);
for(int bulb:bulbs){
switch_[bulb]^=1; // 0=>1, 1=>0
}
vector<int> switch_on;
for(int i=1;i<=100;i++){
if(switch_[i]==1) switch_on.push_back(i);
}
return switch_on;
}
};
==========Q2===========
class Solution {
public:
int firstUniqueFreq(vector<int>& nums) {
unordered_map<int,int> freq,freq_freq;
for(int num:nums) freq[num]++;
for(auto [x,f]:freq){
freq_freq[f]++;
}
for(int num:nums){
int f=freq[num];
if(freq_freq[f]==1) return num;
}
return -1;
}
};
==========Q3===========
class Solution {
public:
int almostPalindromic(string s) {
int n=s.size();
if(n<=1) return 0;
auto expand=[&](int left,int right){
while(left>=0 && right<n){
if(s[left]==s[right]){
left--;
right++;
}
else{
int l1=left-1,r1=right; // remove left character
while(l1>=0 && r1<n && s[l1]==s[r1]){
l1--;
r1++;
}
int l2=left,r2=right+1; // remove right character
while(l2>=0 && r2<n && s[l2]==s[r2]){
l2--;
r2++;
}
return max(r1-l1-1,r2-l2-1);
}
}
if(left<0 && right>=n) return right-left-1; // "abba" , "cabba"
return right-left;
};
int longest=0;
for(int i=0;i<n;i++){
longest=max(longest,expand(i,i)); // odd length substring
longest=max(longest,expand(i,i+1)); // even length substring
}
return longest;
}
};
==========Q4===========
class Solution {
struct Trie{
struct Node{
Node* child[2]={nullptr,nullptr};
int cnt=0;
};
Node* root=new Node();
void insert(int num){
Node* node=root;
for(int i=31;i>=0;i--){
int b=(num>>i)&1;
if(!node->child[b]) node->child[b]=new Node();
node=node->child[b];
node->cnt++;
}
}
void remove(int num){
Node* node=root;
for(int i=31;i>=0;i--){
int b=(num>>i)&1;
node=node->child[b];
node->cnt--;
}
}
int query(int num){
Node* node=root;
int ans=0;
for(int i=31;i>=0;i--){
int b=(num>>i)&1;
if(node->child[1-b]&&node->child[1-b]->cnt>0){
ans|=(1<<i);
node=node->child[1-b];
}else node=node->child[b];
}
return ans;
}
};
public:
int maxXor(vector<int>& nums,int k){
int n=nums.size();
vector<int> pref(n+1,0);
for(int i=0;i<n;i++) pref[i+1]=pref[i]^nums[i];
deque<int> minq,maxq;
Trie trie;
int l=0,ans=0;
trie.insert(pref[0]);
for(int r=0;r<n;r++){ // l=0,r=0 initially
while(!minq.empty() && nums[minq.back()]>=nums[r]) minq.pop_back();
while(!maxq.empty() && nums[maxq.back()]<=nums[r]) maxq.pop_back();
minq.push_back(r);
maxq.push_back(r);
while(nums[maxq.front()]-nums[minq.front()]>k){
if(minq.front()==l) minq.pop_front();
if(maxq.front()==l) maxq.pop_front();
trie.remove(pref[l]);
l++;
}
ans=max(ans,trie.query(pref[r+1]));
trie.insert(pref[r+1]);
}
return ans;
}
};
Editor is loading...
Leave a Comment