Day 1 of #100DaysOfCode
Tags: day1of100daysofcode, 100daysofcode, javascript, webdev
Published: 2024-03-23 17:41:29

## What I learned?

I learned the following topics:

- Two-pointer Approach to solve array problem
- Solved 1 leetcode easy question 283.Move Zeroes
- Solve 1 codeforces question 1360B. Honest Coach
- Object literals, this keyword, instanceof operator, constructor function

## What I develop/solved?

- Solved 1 leetcode easy question 283.Move Zeroes
- Solved 1 codeforces question 1360B. Honest Coach which uses greedy and sorting


## Code snippet/Screenshots/Notes

1. **Leetcode 283. Move all Zeros to the end of the array**
   
- Brute approach

```cpp
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int size = nums.size();

        vector<int> temp; //additonal array

        for(int i = 0; i<size; i++){
            if(nums[i] != 0){
                temp.push_back(nums[i]); //storing non-zeros to additional array
            }
        }  // O(n)

        for(int i = 0; i<temp.size(); i++){
            nums[i] = temp[i]; //put non-zeros to orignal array
        } //O(x)

        for(int i = temp.size(); i<size; i++){
            nums[i] = 0; //fill remaining array with zeros
        }  // O(n-x)
    }
};
```

> Time Complexity: O(n) + O(x) + O(n-x) ~ O(2*n) = O(n)  Where n = total no. of elements, x = total no. of non-zero numbers, n-x = total no. of zeros
> 

> Space complexity: O(n), because we are using temporary array
> 

- Optimal Approach

```cpp
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int j = -1;

        for(int i = 0; i<nums.size(); i++){
            if(nums[i] == 0){  //finding the first 0 and j is assigned to it
                j = i;
                break;
            }
        }

        if(j == -1){  //it means, there are no zero elements in array
            return;
        }

        for(int i = j+1; i<nums.size(); i++){ //start iterating from j+1
            if(nums[i] != 0){  //finding non-zero element 
                swap(nums[j], nums[i]); //and then swap j'th and i'th element
                j++; //increasing j to make sure it remains on first 0
            }
        }
    }
};
```

> Time complexity: O(n) + O(n) = O(2n) = O(n)
> 

> Space Complexity: O(1), because we are not using any extra space to solve the problem
> 
---
2. **Codeforces 1360B. Honest Coach(based on greedy and sorting)**

```cpp
#include <bits/stdc++.h>
using namespace std;

void solve()
{
    int n;
    cin >> n;
    vector<int> arr(n, 0);
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    
    sort(arr.begin(), arr.end());
    
    int finalAnswer = INT_MAX;
    
    for(int i = 1; i<n; i++){
    	int diff = abs(arr[i] - arr[i-1]);
    	if(diff < finalAnswer){
    		finalAnswer = diff;
    	}
    }
    
    cout << finalAnswer << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}
```

---

Objects and classes in JavaScript

-  Javascript is a prototype-based language and its classes are primarily syntactic sugar.
-  Object is a collection of properties and methods

-  Parts of OOPs
   1. Constructor function
   2. Prototypes
   3. Classes
   4. Instances (new, this)

- 4 Pillars of OOPs
   1. Abstraction
   2. Encapsulation
   3. Inheritance
   4. Polymorphism

## Object Literal

```jsx
//object literal

const userDetails = {

    //properties
    username: "randomUsername",
    name: "username",
    loginCnt: 5,
    signedIn: true,

    //methods
    getUserDetails: function () {
        console.log(`username is: ${this.username}`);
    }
}

userDetails.getUserDetails();
```

## This keyword

**`this`** keyword refers to the context within which a function is executed

```jsx
const obj = {
    name: 'John',
    greet: function() {
        console.log('Hello, ' + this.name);
    }
};
obj.greet(); // `this` refers to the `obj` object
```

## **instanceof operator**
```javascript
function Animal() {}

const dog = new Animal();

console.log(dog instanceof Animal); // true
```

## Contructor function

```javascript
   function User(username, loginCount, isLoggedIn) {
   this.username = username
   this.loginCount = loginCount
   this.isLoggedIn = isLoggedIn

   this.greeting = function(){
       console.log(`Hello ${this.username}! How are you?`)
   }

    return this
}

/* Empty object created when use new keyword */

const userOne = new User("ashCode98", 2, true);
const userTwo = new User("random", 1, false);

console.log(userOne)
console.log(userTwo)
```