LeetCode, GeeksForGeeks Problem of the day solution
前往频道在 Telegram
Complete daily challenges from LeetCode, GeeksForGeeks and redeem their rewards Channel link : https://t.me/leetcode_gfg_potd
显示更多1 250
订阅者
+224 小时
+147 天
+2930 天
帖子存档
class Solution{
public:
int countSubArrayProductLessThanK(const vector& a, int n, long long k) {
int ans = 0;
int lt = 0;
int rt = 0;
long long curr = 1;
while(rt=k){
// ans+=(rt-lt);
lt = rt;
rt++;
lt++;
curr = 1;
}
else if(curr*a[rt]=k){
curr = curr/a[lt];
lt++;
if(lt==rt){
curr = 1;
break;
}
}
}
}
return ans;
}
};
class Solution {
public:
bool buddyStrings(string s, string goal) {
if (s.length() != goal.length()) {
return false;
}
vector<int> diff_indices;
vector<char> diff_chars;
for (int i = 0; i < s.length(); i++) {
if (s[i] != goal[i]) {
diff_indices.push_back(i);
diff_chars.push_back(s[i]);
}
}
if (diff_indices.size() == 0) {
// If both strings are equal, check if there are duplicate characters in
s
vector<int> count(26, 0);
for (char c : s) {
count[c - 'a']++;
if (count[c - 'a'] > 1) {
return true;
}
}
return false;
}
if (diff_indices.size() != 2) {
return false;
}
int i = diff_indices[0];
int j = diff_indices[1];
return (s[i] == goal[j] && s[j] == goal[i]);
}
};class Solution{
public:
int maxIndexDiff(int arr[], int n) {
int nums[n];
for(int i =0;i
class Solution {
public:
void solve(int n , int ind , vector > &requests , vector &indeg , int &ans , int count){
if(ind == requests.size()){
int flag =1;
for(int i =0 ; i < n ;i++){
if(indeg[i] != 0){
flag =0 ;
break;
}
}
if(flag){
ans = max(ans , count );
}
return;
}
solve(n ,ind+1 , requests , indeg , ans , count);
indeg[requests[ind][0]]--;
indeg[requests[ind][1]]++;
solve(n ,ind+1 , requests , indeg , ans,count+1);
indeg[requests[ind][0]]++;
indeg[requests[ind][1]]--;
}
int maximumRequests(int n, vector>& requests) {
int ans = INT_MIN;
vector indeg(n , 0);
solve(n ,0, requests, indeg , ans , 0);
return ans ;
}
};
class Solution{
public:
int setSetBit(int x, int y, int l, int r){
for(int i{l-1};i<=(r-1);i++){
if(y & (1 << i)) x |= (1 << i);
}
return x;
}
};
class Solution {
public:
vectorbucket;
int ans;
void backtracking(vector&cookies,int k,int cookieNumber)
{
if(cookieNumber==cookies.size())
{
int maxx=0;
for(int i=0;i& cookies, int k) {
bucket.resize(k,0);
ans=INT_MAX;
backtracking(cookies, k, 0);
return ans;
}
};
class Solution {
public:
int setBits(int N) {
int count=0;
for(int i=31;i>=0;i--){
int bit=(N>>i) & 1;
if(bit==1){
count++;
}
}
return count;
}
};
class Solution {
public:
int latestDayToCross(int row, int col, vector>& cells) {
int N = row + 5, M = col + 5;
int a[N][M], dx[] = {0,0,1,-1}, dy[] = {1,-1,0,0};
bool vis[N][M];
// set date to each cell
for(int i = 0; i < cells.size(); i++)
a[cells[i][0]][cells[i][1]] = i+1;
// binary search
int l = 0, r = row * col;
while(l < r){
int mid = (l+r+1) / 2;
bool check = false;
fill_n(vis[0], N*M, false);
queue> q;
// push the top cells
for(int i = 1; i <= col; i++)
if(a[1][i] > mid)
q.push({1,i});
// BFS
while(!q.empty()){
auto [x, y] = q.front();
q.pop();
if(vis[x][y]) continue;
vis[x][y] = true;
// check if a current cell is the bottom
if(x == row){
check = true;
break;
}
for(int i = 0; i < 4; i++){
int xx = x + dx[i], yy = y + dy[i];
if(xx > row or xx < 1 or yy < 1 or yy > col or vis[xx][yy] or a[xx][yy] <= mid) continue;
q.push({xx,yy});
}
}
if(check) l = mid;
else r = mid-1;
}
return r;
}
};
class Solution{
public:
int isDivisible(string s){
int c=0;
int x=1;
for(int i=s.size()-1;i>=0;i--)
{
if(s[i]=='1') c+=x;
x=(x==1)?2:1;
}
return (c%3==0)?1:0;
}
};
class Solution {
public:
const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, 1, -1};
int shortestPathAllKeys(vector& grid) {
int m = grid.size();
int n = grid[0].size();
int keys=0;
queue> q;
for(int i=0; i= 'a' && grid[i][j] <= 'z') {
keys++;
}
if(grid[i][j]=='@') {
q.push({i,j,0}); // {i,j,mask}
}
}
}
// The main crux of the problem is that we are going to visit the same cell again only if we are visiting the cell with different keysState,
// otherwise we will be in a infinite loop as we can vis the cells again, it's not like simple BFS, it's BFS WITH STATES.
set,int>> vis; // {i,j,"currKeys"}
int steps = 0;
while(!q.empty()){
int queueSize = q.size();
for(int i=0; i= 'a' && grid[nX][nY] <= 'z') {
newMask |= (1 << (grid[nX][nY] - 'a'));
}
if(vis.find({{nX, nY}, newMask}) != vis.end() ||
(grid[nX][nY] >= 'A' && grid[nX][nY] <= 'Z' && !(mask&(1<<(grid[nX][nY]-'A'))))) {
continue;
}
q.push({nX, nY, newMask});
vis.insert({{nX, nY}, newMask});
}
}
steps++;
}
return -1;
}
};
