Leetcode Solution Revision Flashcards

For reviewing solutions to specific questions that i have already completed

1
Q

What is this code doing, and what is its time/space complexity?

function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i]
        if(map.has(diff)){
            return [i, map.get(diff)]
        }
        map.set(nums[i],i)
    }
};
A

It is the solution to the Two Sum problem, it searches through a list of numbers and looks for the index of 2 numbers that add up the target number.

It has a time complexity of O(n) because it is iterating through the list once. It is O(n) space complexity because it creates a map that is up to the size of the input array.

[Two Sum]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Fill in the blanks for this solution

function(nums, target) {
    let map = ?????
    for(let i = 0; i < nums.length; i++){
        let diff = ????
        if(map.has(diff)){
            return [i, map.get(diff)]
        }
        ????
    }
};

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

A
function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i]
        if(map.has(diff)){
            return [i, map.get(diff)]
        }
        map.set(nums[i],i)
    }
};

[Two Sum]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Fill in the blanks for this solution

function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        ????
        if(map.has(diff)){
            ??????
        }
        map.set(nums[i],i)
    }
};

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

A
function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i]
        if(map.has(diff)){
            return [i, map.get(diff)]
        }
        map.set(nums[i],i)
    }
};

[Two Sum]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Fill in the blanks for this solution

function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i]
        if(??????){
            return [i, map.get(diff)]
        }
        map.set(????,????)
    }
};

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

A
function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i]
        if(map.has(diff)){
            return [i, map.get(diff)]
        }
        map.set(nums[i],i)
    }
};

[Two Sum]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Explain in english how to solve this problem

Given a string s containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = “()”
Output: true
Example 2:

Input: s = “()[]{}”
Output: true
Example 3:

Input: s = “(]”
Output: false

A
  1. Create an empty stack to store the closing brackets
  2. iterate through the list
  3. if the item is an open bracket, add its corresponding closing bracket to the list
  4. Otherwise, if its a closing bracket check if the last item in the stack is different. If it is, then its invalid
  5. At the end of the loop, if the stack has nothing left in it, then the parenthesis are valid

[Valid Parenthesis]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What is the time and space complexity of this code?

function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};
A

It is creating a stack in memory which could be up to the size of the array, so its O(n) space complexity and it iterates over the whole array once so its O(n) time complexity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What is this code doing?

function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};
A

It is looking at items in an array of brackets and checking if the brackets have a corresponding match in the correct order. Eg [,(,},] would be correct and [,[,},) would be incorrect

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Fill in the blanks

function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            ????
        } else if (s[idx] == '[') {
            ???
        } else if (s[idx] == '(') {
           ????
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};

Given a string s containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = “()”
Output: true
Example 2:

Input: s = “()[]{}”
Output: true
Example 3:

Input: s = “(]”
Output: false

A
function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Fill in the blanks

function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            ????
        }
    }
    return ????

};

Given a string s containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = “()”
Output: true
Example 2:

Input: s = “()[]{}”
Output: true
Example 3:

Input: s = “(]”
Output: false

A
function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Fill in the blanks

function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (?????) {
            stack.push('}');
        } else if (?????) {
            stack.push(']');
        } else if (?????)  {
            stack.push(')');
        }
        else if (????) {
            return false;
        }
    }
    return !stack.length;

};

Given a string s containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = “()”
Output: true
Example 2:

Input: s = “()[]{}”
Output: true
Example 3:

Input: s = “(]”
Output: false

A
function (s) {
    let stack = [];
    for (let idx = 0; idx < s.length; idx++) {
        if (s[idx] == '{') {
            stack.push('}');
        } else if (s[idx] == '[') {
            stack.push(']');
        } else if (s[idx] == '(') {
            stack.push(')');
        }
        else if (stack.pop() !== s[idx]) {
            return false;
        }
    }
    return !stack.length;

};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Fill in the blanks

const isPalindrome = function(s) {
    s = s.toLowerCase()

    let i = 0
    let j = s.length-1

    const IsAlphaNumeric = (character) => {
        let code = character.charCodeAt(0)
        if (!(code > 47 && code < 58) && // numeric (0-9)
            !(code > 64 && code < 91) && // upper alpha (A-Z)
            !(code > 96 && code < 123)) { // lower alpha (a-z)
        return false;
        }
        return true
    }

    while(????){
        while(????){
            i++;
        }

        while(????){
            j--;
        }
        if(????){
            return false
        }
        i++;
        j--;
    }

    return true
};

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

Given a string s, return true if it is a palindrome, or false otherwise.

Example 1:

Input: s = “A man, a plan, a canal: Panama”
Output: true
Explanation: “amanaplanacanalpanama” is a palindrome.
Example 2:

Input: s = “race a car”
Output: false
Explanation: “raceacar” is not a palindrome.
Example 3:

Input: s = “ “
Output: true
Explanation: s is an empty string “” after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.

A
const isPalindrome = function(s) {
    s = s.toLowerCase()

    let i = 0
    let j = s.length-1

    const IsAlphaNumeric = (character) => {
        let code = character.charCodeAt(0)
        if (!(code > 47 && code < 58) && // numeric (0-9)
            !(code > 64 && code < 91) && // upper alpha (A-Z)
            !(code > 96 && code < 123)) { // lower alpha (a-z)
        return false;
        }
        return true
    }

    while(i < j){
        while(!IsAlphaNumeric(s[i]) && i < j){
            i++;
        }

        while(!IsAlphaNumeric(s[j]) && i < j){
            j--;
        }
        if(s[i] != s[j]){
            return false
        }
        i++;
        j--;
    }

    return true
};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Fill in the blanks

const isPalindrome = function(s) {
    s = s.toLowerCase()

    let i = 0
    let j = s.length-1

    const IsAlphaNumeric = (character) => {
        let code = character.charCodeAt(0)
        if (!(code > 47 && code < 58) && // numeric (0-9)
            !(code > 64 && code < 91) && // upper alpha (A-Z)
            !(code > 96 && code < 123)) { // lower alpha (a-z)
        return false;
        }
        return true
    }

    while(i < j){
        while(!IsAlphaNumeric(s[i]) && i < j){
            ????
        }

        while(!IsAlphaNumeric(s[j]) && i < j){
            ????
        }
        if(s[i] != s[j]){
            ????
        }
        ????
        ????
    }

    return true
};

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

Given a string s, return true if it is a palindrome, or false otherwise.

Example 1:

Input: s = “A man, a plan, a canal: Panama”
Output: true
Explanation: “amanaplanacanalpanama” is a palindrome.
Example 2:

Input: s = “race a car”
Output: false
Explanation: “raceacar” is not a palindrome.
Example 3:

Input: s = “ “
Output: true
Explanation: s is an empty string “” after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.

A
const isPalindrome = function(s) {
    s = s.toLowerCase()

    let i = 0
    let j = s.length-1

    const IsAlphaNumeric = (character) => {
        let code = character.charCodeAt(0)
        if (!(code > 47 && code < 58) && // numeric (0-9)
            !(code > 64 && code < 91) && // upper alpha (A-Z)
            !(code > 96 && code < 123)) { // lower alpha (a-z)
        return false;
        }
        return true
    }

    while(i < j){
        while(!IsAlphaNumeric(s[i]) && i < j){
            i++;
        }

        while(!IsAlphaNumeric(s[j]) && i < j){
            j--;
        }
        if(s[i] != s[j]){
            return false
        }
        i++;
        j--;
    }

    return true
};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Explain in english how you would solve this problem

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

Given a string s, return true if it is a palindrome, or false otherwise.

Example 1:

Input: s = “A man, a plan, a canal: Panama”
Output: true
Explanation: “amanaplanacanalpanama” is a palindrome.
Example 2:

Input: s = “race a car”
Output: false
Explanation: “raceacar” is not a palindrome.
Example 3:

Input: s = “ “
Output: true
Explanation: s is an empty string “” after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.

A
  • Start by lowercasing the string
  • A pointer at the start of the string and the end of the string
  • while the left pointer index continues to be before the right pointer:
  • Check left pointer, if its not alphanumeric then increment it by 1
  • Check the right pointer, if its not alphanumberic then decrement it by 1
  • Then compare the left and right pointers value. If it does not match its not a palindrome
  • if it does, increment left by 1 and decrement right by 1.
  • if we exit the loop, then its a palindome
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What is the space and time complexity of this code

const isPalindrome = function(s) {
    s = s.toLowerCase()

    let i = 0
    let j = s.length-1

    const IsAlphaNumeric = (character) => {
        let code = character.charCodeAt(0)
        if (!(code > 47 && code < 58) && // numeric (0-9)
            !(code > 64 && code < 91) && // upper alpha (A-Z)
            !(code > 96 && code < 123)) { // lower alpha (a-z)
        return false;
        }
        return true
    }

    while(i < j){
        while(!IsAlphaNumeric(s[i]) && i < j){
            i++;
        }

        while(!IsAlphaNumeric(s[j]) && i < j){
            j--;
        }
        if(s[i] != s[j]){
            return false
        }
        i++;
        j--;
    }

    return true
};
A

It has a space complexity of O(1), because we are not creating any additional memory. It has a time complexity of O(n) because we will need to check each item of the array once

How well did you know this?
1
Not at all
2
3
4
5
Perfectly