Giter Site home page Giter Site logo

leetcode-exercise's Introduction

Hi there, I'm yihan123 👋

I'm Peng Yao hui, a web frontend developer from ChangSha, China.


📊 some stats

GitHub Streak


📊 Weekly development breakdown

Markdown         3 hrs 30 mins      ███████████▓░░░░░░░░░░░░░   46.74 % 
JavaScript       1 hr 35 mins       █████▒░░░░░░░░░░░░░░░░░░░   21.32 % 
HTML             48 mins            ██▓░░░░░░░░░░░░░░░░░░░░░░   10.83 % 
CSS3             29 mins            █▓░░░░░░░░░░░░░░░░░░░░░░░   06.59 % 
HTML5            27 mins            █▓░░░░░░░░░░░░░░░░░░░░░░░   06.16 % 

leetcode-exercise's People

Contributors

yihan12 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

myyihan

leetcode-exercise's Issues

BFS-广度优先遍历

广度优先遍历是一种图的遍历算法,它从图的起始顶点开始,先访问起始顶点的所有邻接顶点,然后再依次访问这些邻接顶点的邻接顶点,以此类推,直到遍历完所有顶点。

广度优先遍历通常使用队列来实现,具体步骤如下:

  • 将起始顶点入队;
  • 当队列不为空时,取出队列头部的顶点,并将其所有未访问的邻接顶点入队;
  • 标记当前顶点为已访问;
  • 重复步骤2和步骤3,直到队列为空。

广度优先遍历的特点是能够按层次遍历图的顶点,从而找到起始顶点到其他顶点的最短路径。它适合应用于寻找最短路径、拓扑排序等问题。

DFS-深度优先遍历

深度优先遍历是一种图的遍历算法,它从图的起始顶点开始,沿着一条路径一直访问到最深的顶点,然后再回溯到上一个顶点,继续沿着另一条路径访问,直到遍历完所有顶点。

深度优先遍历通常使用递归或者栈来实现,具体步骤如下:

  • 从起始顶点开始,访问该顶点,并标记为已访问;
  • 递归访问该顶点的未访问邻接顶点,直到所有邻接顶点都被访问过;
  • 如果当前顶点的所有邻接顶点都被访问过,回溯到上一个顶点,继续递归访问其未访问邻接顶点;
  • 重复步骤2和步骤3,直到所有顶点都被访问过。

深度优先遍历的特点是能够沿着一条路径一直向下访问,直到最深的顶点,然后再回溯到上一个顶点,继续向下访问。它适合应用于寻找连通分量、拓扑排序等问题。

时间复杂度

时间复杂度

是什么?

  • 一个函数,用大O表示,比如O(1)、O(n)、O(logN)...
  • 定性描述该算法的时间

O(1)

// O(1)
let i = 0;
i += 1

O(n)

// O(n)
for(let i = 0; i < n; i+=1){
    console.log(i)
}

O(n)+O(1)=O(n)

// O(n)+O(1)=O(n)
let i = 0;
i += 1
for(let j = 0; j < n; j+=1){
    console.log(j)
}

O(n)*O(n)=O(n^2)

// O(n)*O(n)=O(n^2)
for(let i = 0; i < n; i+=1){
    for(let j = 0; j < n; j+=1){
        console.log(i,j)
    }
}

O(n)*O(n)=O(n^2)

// O(n)*O(n)=O(n^2)
for(let i = 0; i < n; i+=1){
    for(let j = 0; j < n; j+=1){
        console.log(i,j)
    }
}

O(logN)

// O(logN)
let i = 1;
while(i > n){
    console.log(i)
    i *= 2
}

递归

递归是指一个函数在执行过程中调用自身的行为。在编程中,递归通常用于解决可以被分解为相似子问题的问题,每次递归调用都是为了解决一个规模更小的子问题。

递归函数通常包含两部分:基本情况和递归情况。基本情况是指当问题的规模足够小,可以直接求解而不需要再次递归调用的情况。递归情况是指问题的规模较大,需要通过递归调用来解决的情况。

在编程中,递归可以简化一些问题的解决过程,使得代码更加简洁和易读。然而,递归也可能导致性能问题,因为每次递归调用都需要在内存中保存一些信息,如果递归的层级过深,可能会导致栈溢出等问题。

因此,在使用递归时,需要注意选择合适的终止条件,避免无限递归,同时需要考虑性能和内存消耗的问题。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.