1. Remove Duplicates from Sorted Array

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/727/

STL erase() method:

  1. class Solution {
  2. public:
  3. int removeDuplicates(vector<int>& nums) {
  4. if(nums.empty())
  5. return 0;
  6. else if(nums.size()==1)
  7. return 1;
  8. nums.erase(unique(nums.begin(), nums.end()), nums.end());
  9. return nums.size();
  10. }
  11. };

go over method:

  1. class Solution {
  2. public:
  3. int removeDuplicates(vector<int>& nums) {
  4. int bypass = 0;
  5. int n = nums.size();
  6. for(int i = 1; i < n; i++){
  7. if(nums[i] == nums[i-1])
  8. bypass++;
  9. else
  10. nums[i-bypass] = nums[i];
  11. }
  12. return n-bypass;
  13. }
  14. };

2. Remove Duplicates from Sorted Array

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/564/

binary tree method(TLE):

  1. class Solution {
  2. public:
  3. int maxProfit(vector<int>& prices) {
  4. int profit = 0;
  5. profit = buyOrSell(prices, 0, 0, 0);
  6. return profit;
  7. }
  8. private:
  9. int buyOrSell(vector<int>& prices, int curr, int stock, int profit){
  10. if(curr == prices.size())
  11. return profit;
  12. int r1, r2;
  13. if(stock == 1){
  14. r1 = buyOrSell(prices, curr+1, 0, profit + prices[curr]); //sell
  15. r2 = buyOrSell(prices, curr+1, 1, profit); //not sell
  16. } else if(stock==0) {
  17. r1 = buyOrSell(prices, curr+1, 1, profit - prices[curr]); //buy
  18. r2 = buyOrSell(prices, curr+1, 0, profit); //not buy
  19. }
  20. return max(r1, r2);
  21. }
  22. };

max():

idea: https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/564/discuss/39420/Three-lines-in-C++-with-explanation

  1. class Solution {
  2. public:
  3. int maxProfit(vector<int> &prices) {
  4. int result = 0;
  5. for (int i = 1; i < prices.size(); i++)
  6. result += max(prices[i] - prices[i - 1], 0);
  7. return result;
  8. }
  9. };

3. Rotate Array

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/646/

add and delete method:

  1. class Solution {
  2. public:
  3. void rotate(vector<int>& nums, int k) {
  4. if(k==0) return;
  5. int tail = nums[nums.size() - 1];
  6. nums.insert(nums.begin(), tail);
  7. nums.erase(nums.begin() + nums.size() - 1);
  8. rotate(nums, k - 1);
  9. }
  10. };

STL rotate() method:

  1. class Solution {
  2. public:
  3. void rotate(vector<int>& nums, int k) {
  4. int n = nums.size();
  5. if(k > nums.size())
  6. k = k % n;
  7. std::rotate(nums.begin(), nums.begin() + (n - k), nums.end());
  8. }
  9. };

4. Contains Duplicate

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/578/

sort and remove duplicate method:

  1. class Solution {
  2. public:
  3. bool containsDuplicate(vector<int>& nums) {
  4. int full_len = nums.size();
  5. int shorten_len;
  6. sort(nums.begin(), nums.end());
  7. nums.erase(unique(nums.begin(), nums.end()), nums.end());
  8. shorten_len = nums.size();
  9. return !(full_len == shorten_len);
  10. }
  11. };

sort and compare neighbours:

  1. class Solution {
  2. public:
  3. bool containsDuplicate(vector<int>& nums) {
  4. sort(nums.begin(), nums.end());
  5. for(int i = 1; i < nums.size(); i++){
  6. if(nums[i] == nums[i-1]){
  7. return true;
  8. }
  9. }
  10. return false;
  11. }
  12. };

5. Single Number

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/549/

hashmap method:

  1. class Solution {
  2. public:
  3. int singleNumber(vector<int>& nums) {
  4. unordered_map<int, int> map;
  5. for(int i = 0; i < nums.size(); i++){
  6. map[nums[i]]++;
  7. }
  8. for(unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++){
  9. if(it->second == 1)
  10. return it->first;
  11. }
  12. return 0;
  13. }
  14. };

jump 2 method:

  1. class Solution {
  2. public:
  3. int singleNumber(vector<int>& nums) {
  4. sort(nums.begin(), nums.end()); //sorting
  5. for(int i = 0; i < nums.size() - 1; i+=2){ //2 jumps 1 time
  6. if(nums[i] != nums[i+1]){ //if a pair is not the same number, the number of purpose is inside
  7. if((i > 0 && nums[i] != nums[i-1]) || (i == 0)){
  8. return nums[i];
  9. }
  10. if(nums[i+1] != nums[i+2]){
  11. return nums[i+1];
  12. }
  13. }
  14. }
  15. return nums[nums.size()-1];
  16. }
  17. };

6. Intersection of Two Arrays II

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/674/

7. Plus One

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/559/

carry method:

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int i = digits.size() - 1;

        int carry = 0;

        while(i >= 0){
            if(digits[i] + 1 == 10){
                digits[i] = 0;
                carry = 1;
                i--;
            } else {
                digits[i]++;
                break;
            }
        }

        if(i < 0 && carry == 1){
            digits.insert(digits.begin(), 1);
        }

        return digits;
    }
};

8. Move Zeroes

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/567/

re-assignment method:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int nonZero = 0;

        for(int i = 0; i < nums.size(); i++){
            if(nums[i] != 0){
                nums[nonZero] = nums[i];
                nonZero++;
            }
        }

        for(; nonZero < nums.size(); nonZero++){
            nums[nonZero] = 0;
        }
    }
};

9. Two Sum

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/546/

hashmap and find() method:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hashmap;

        int n = nums.size();

        for(int i = 0; i < n; i++)
            hashmap[nums[i]] = i;

        for(int i = 0; i < n; i++){
            unordered_map<int, int>::iterator got = hashmap.find(target-nums[i]);

            if(got !=hashmap.end() && got->second != i)
                return {i, got->second};
        }

        return {};
    }
};

10. Valid Sudoku

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/769/

go over all numbers to check availability based on sudoku rules:

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {

        int sub_r, sub_c;

        for(int r = 0; r < 9; r++){
            for(int c = 0; c < 9; c++){
                //if has numbers
                if(isdigit(board[r][c])){
                    //for rows
                    for(int r_o = 0; r_o < 9; r_o++){
                        if(board[r_o][c] == board[r][c] && r_o != r){
                            return false;
                        }
                    }

                    //for columns
                    for(int c_o = 0; c_o < 9; c_o++){
                        if(board[r][c_o] == board[r][c] && c_o != c){
                            return false;
                        }
                    }

                    //for 3*3 grids
                    if(r <= 2){
                        sub_r = 0;
                    } else if(r >= 3 && r <= 5){
                        sub_r = 1;
                    } else {
                        sub_r = 2;
                    }

                    if(c <= 2){
                        sub_c = 0;
                    } else if(c >= 3 && c <= 5){
                        sub_c = 1;
                    } else {
                        sub_c = 2;
                    }

                    for(int r_s = 3*sub_r; r_s < 3*(sub_r + 1); r_s++){
                        for(int c_s = 3*sub_c; c_s < 3*(sub_c + 1); c_s++){
                            if(board[r_s][c_s] == board[r][c] && !(r_s == r && c_s == c)){
                                return false;
                            }
                        }
                    }
                }
            }
        }

        return true;
    }

};

11. Rotate Image

https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/770/

reverse row sequence and swap diagonally:

class Solution {
public:
    /*
     * clockwise rotate
     * first reverse up to down, then swap the symmetry 
     * 1 2 3     7 8 9     7 4 1
     * 4 5 6  => 4 5 6  => 8 5 2
     * 7 8 9     1 2 3     9 6 3
    */
    void rotate(vector<vector<int>> &matrix) {
        reverse(matrix.begin(), matrix.end());

        for (int i = 0; i < matrix.size(); i++) {
            for (int j = i + 1; j < matrix[i].size(); j++)
                swap(matrix[i][j], matrix[j][i]);
        }
    }
};