Skip to content

vickyraut/Java-DSA

Repository files navigation

JAVA-DSA

Welcome to the JAVA-DSA repository! This repository tracks my progress through the "Alpha by Apna College" Data Structures and Algorithms course. Whether you're just starting or sharpening your skills, fork this repo to track your progress and conquer coding challenges!

Table of Contents

Course Overview

The "Alpha by Apna College" DSA course covers a wide range of topics including:

Sequence to Follow ⬇️

  • Introduction to DSA
  • Flowcharts & Pseudocode
  • Datatypes & Variables
  • Operators
  • Conditional Statements
  • Loops
  • Patterns
  • Functions or Methods
  • Arrays
  • Basic Sorting Algorithms
  • 2D Array
  • Strings
  • Bit Manipulation
  • OOPS
  • Recusion
  • Divide & Conquer
  • Time & Space Complexity
  • Backtracking
  • ArrayList
  • Linked List
  • Stacks
  • Queues
  • Greedy Algorithms
  • Binary Trees
  • Binary Search Trees
  • Heaps
  • Hashing
  • Tries
  • Graphs
  • Dynamic Programming
  • Segment Trees

Progress Tracker (Sequentially)

Topic Status Difficulty Confidence Level (%) External Resources Completion Date
Introduction to DSA 🕰️ Yet to Start 🟩 Beginner 0 GeeksforGeeks -
Arrays 🏃‍♂️ In Progress 🟩 Beginner 50 LeetCode -
Linked Lists 🕰️ Yet to Start 🟩 Beginner 0 GeeksforGeeks -
Stacks and Queues 🤦‍♂️ Procrastinated 🟨 Intermediate 25 HackerRank -
Trees 🕰️ Yet to Start 🟨 Intermediate 0 GeeksforGeeks -
Graphs 🏃‍♂️ In Progress 🟨 Intermediate 75 HackerRank -
Sorting and Searching 🎉 Completed 🟥 Advanced 100 LeetCode YYYY-MM-DD
Dynamic Programming 🏃‍♂️ In Progress 🟥 Advanced 60 HackerRank -
Backtracking 🏃‍♂️ In Progress 🟥 Advanced 50 GeeksforGeeks -
Greedy Algorithms 🕰️ Yet to Start 🟥 Advanced 0 GeeksforGeeks -
Hashing 🏃‍♂️ In Progress 🟨 Intermediate 80 LeetCode -
More... 🕰️ Yet to Start 🌐 Varies 0 - -

Topic Questions

Introduction to DSA

  1. What is an algorithm? (Easy) - GeeksforGeeks
  2. Explain Big O notation. (Medium) - HackerRank
  3. Difference between time complexity and space complexity. (Medium) - LeetCode

Arrays

  1. Find the maximum element in an array. (Easy) - LeetCode
  2. Implement a function to reverse an array. (Easy) - GeeksforGeeks
  3. Find the two numbers in an array that add up to a given sum. (Medium) - HackerRank
  4. Find the subarray with the maximum sum (Kadane's Algorithm). (Hard) - GeeksforGeeks

Linked Lists

  1. Implement a singly linked list. (Easy) - GeeksforGeeks
  2. Detect a cycle in a linked list. (Medium) - LeetCode
  3. Merge two sorted linked lists. (Medium) - HackerRank
  4. Find the intersection point of two linked lists. (Hard) - GeeksforGeeks

Stacks and Queues

  1. Implement a stack using arrays. (Easy) - GeeksforGeeks
  2. Implement a queue using two stacks. (Medium) - HackerRank
  3. Check for balanced parentheses in an expression. (Medium) - GeeksforGeeks
  4. Implement a circular queue. (Hard) - LeetCode

Trees

  1. Implement a binary tree. (Easy) - GeeksforGeeks
  2. Perform in-order traversal of a binary tree. (Medium) - LeetCode
  3. Find the height of a binary tree. (Medium) - HackerRank
  4. Check if a binary tree is balanced. (Hard) - GeeksforGeeks

Graphs

  1. Implement a graph using an adjacency list. (Easy) - GeeksforGeeks
  2. Perform a depth-first search (DFS) on a graph. (Medium) - HackerRank
  3. Find the shortest path in an unweighted graph (BFS). (Medium) - GeeksforGeeks
  4. Detect a cycle in a directed graph. (Hard) - LeetCode

Sorting and Searching

  1. Implement Bubble Sort. (Easy) - GeeksforGeeks
  2. Implement Binary Search. (Medium) - GeeksforGeeks
  3. Implement Merge Sort. (Medium) - HackerRank
  4. Find the Kth smallest element in an unsorted array. (Hard) - LeetCode

Structure Overview

Main Directories:

  • 2D-Arrays, Advance Patterns, ArrayList, etc.: Each directory focuses on a specific topic or category of problems.
  • Alpha 3.0: Contains PDF resources and curriculum materials, not Java code.

Subdirectories:

  • Each main directory contains Java files (.java) and possibly compiled classes (.class) and output directories (out/production).

Specific Files:

  • Each Java file likely corresponds to a specific problem or example within that category. For instance, in 2D-Arrays, files like Array_Backtracking.java, Basic_2D_Arrays.java, etc., suggest different exercises related to 2D arrays.

Output and Compiled Classes:

  • out/production subdirectories contain compiled .class files, indicating these are executable Java classes generated after compiling the .java files.

Recommendations

Navigating and Using Code:

  • Explore each directory to understand the specific problems or exercises covered.
  • Review the .java files to see the code implementations and understand the logic behind each problem.

Execution and Testing:

  • Compile and run the Java classes (*.class) to see how each program behaves.
  • Ensure you have a Java development environment set up (javac for compilation and java for execution).

Learning and Progression:

  • Start with directories like Arrays, Basic Sorting Algorithms, Conditional Statements, etc., which cover fundamental programming constructs.
  • Progress to more complex topics like Backtracking, Dynamic Programming, Greedy Algorithms, etc., as your understanding deepens.

Documentation and Notes:

  • Use the PDFs in Alpha 3.0 for additional learning resources and theoretical background on programming concepts.

Forking the Repository

Ready to dive in and make this your own? Follow these steps:

  1. Fork the Repository:

    • Click on the 'Fork' button at the top right corner of this page.
  2. Clone your Fork:

    git clone https://github.com/vickyraut/Java-DSA.git
  3. Navigate to the Project Directory:

    cd JAVA-DSA
  4. Personalize the Progress Tracker:

    • Edit the README.md file to update the progress tracker with your completion dates and statuses.

Installation

To set up this repository on your local machine:

  1. Ensure you have Java installed on your machine.
  2. Clone the repository:
    git clone https://github.com/your_username/JAVA-DSA.git
  3. Navigate to the project directory:
    cd JAVA-DSA

Usage

  1. Explore Topics: Navigate through the directories to explore different topics covered in the DSA course.

  2. Track Your Progress: Use the progress tracker table in the README to track your progress through each topic. Update the status and confidence level based on your understanding and practice.

  3. Compile and Execute: Compile Java classes (*.java) using javac. Run the compiled classes using java.

Contributing

Love coding challenges? Join us and contribute:

  1. Fork this repository.
  2. Create a new branch:
    git checkout -b feature-branch
  3. Make your changes and commit them:
    git commit -m 'Add some feature'
  4. Push to the branch:
    git push origin feature-branch
  5. Submit a pull request.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

Contact

Got questions or suggestions? Reach out to us: