2021-02-27 Daily-Challenge
Today is Saturday, I gonna review the tasks I've done this week, and finish today's leetcode's February LeetCoding Challenge with cpp
.
LeetCode Review
Longest Word in Dictionary through Deleting
class Solution {
bool isSubsequence(string &s, string &d) {
int pos = 0;
int len = d.length();
for(auto c : s) {
if(pos == len) break;
if(c == d[pos]) pos += 1;
}
return pos == len;
}
public:
string findLongestWord(string s, vector<string>& d) {
string answer;
for(auto &d : d) {
if(d.length() < answer.length() || (d.length() == answer.length() && d >= answer)) continue;
if(isSubsequence(s, d)) answer = d;
}
return answer;
}
};
Search a 2D Matrix II
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int rows = matrix.size();
int cols = matrix.front().size();
int row = 0;
int col = cols - 1;
while(row < rows && col >= 0) {
if(matrix[row][col] == target) return true;
if(matrix[row][col] > target) {
col -= 1;
} else {
row += 1;
}
}
return false;
}
};
Score of Parentheses
class Solution {
public:
int scoreOfParentheses(string S) {
int answer = 0;
int count = 0;
char last = 0;
for(auto c : S) {
if(c == '(') {
count += 1;
} else {
count -= 1;
if(last == '(') answer += (1 << count);
}
last = c;
}
return answer;
}
};
Shortest Unsorted Continuous Subarray
this solution can't be too clean
Validate Stack Sequences
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int pos = 0;
int len = pushed.size();
vector<int> st;
for(auto i : pushed) {
st.push_back(i);
while(st.size() && st.back() == popped[pos]) {
st.pop_back();
pos += 1;
}
}
return st.size() == 0;
}
};
February LeetCoding Challenge 27
Description
Divide Two Integers
Given two integers dividend
and divisor
, divide two integers without using multiplication, division, and mod operator.
Return the quotient after dividing dividend
by divisor
.
The integer division should truncate toward zero, which means losing its fractional part. For example, truncate(8.345) = 8
and truncate(-2.7335) = -2
.
Note:
- Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For this problem, assume that your function returns 231 − 1 when the division result overflows.
Example 1:
Input: dividend = 10, divisor = 3
Output: 3
Explanation: 10/3 = truncate(3.33333..) = 3.
Example 2:
Input: dividend = 7, divisor = -3
Output: -2
Explanation: 7/-3 = truncate(-2.33333..) = -2.
Example 3:
Input: dividend = 0, divisor = 1
Output: 0
Example 4:
Input: dividend = 1, divisor = 1
Output: 1
Constraints:
- $-2^{31} \le dividend, divisor \le 2^{31} - 1$
divisor != 0
Solution
class Solution {
int answer = 0;
int minus(int current, int base, int resultBase) {
if(current > base) {
return current;
}
if(base >= INT_MIN / 2) current = minus(current, base + base, resultBase + resultBase);
if(current > base) {
return current;
}
current -= base;
answer += resultBase;
return current;
}
public:
int divide(int dividend, int divisor) {
if(dividend == INT_MIN && divisor == -1) return INT_MAX;
int sign = 1;
if(dividend > 0) {
sign = -1;
dividend = 0 - dividend;
}
if(divisor > 0) {
sign = sign == 1 ? -1 : 1;
divisor = 0 - divisor;
}
minus(dividend, divisor, -1);
answer = sign == 1 ? 0 - answer : answer;
return answer;
}
};