Git Product home page Git Product logo

algorithm's Introduction

数组

思路(数组)

  • 空间换时间,可以借助哈希表。
  • 可以定义两个索引(首尾索引),同时遍历。
  • 可以基于有序的条件下进行。
  • 动态规划算法。
  • 分治法。
  • 斐波那契数列,迭代法。
  • 取余、取模。

两数之和

思路

  • 空间换时间,借助字典。时间复杂度:O(n),空间复杂度:O(n)。

题解

两数之和II-输入有序数组

思路

  • 首尾同时遍历。时间复杂度:O(n),空间复杂度:O(1)。

题解

三数之和

思路

  • 先排序,在遍历中,在剩余的数组元素中进行首尾的同时遍历。时间复杂度:O(n^2),空间复杂度:O(1)。

题解

最大子序和

思路

  • 动态规划算法。时间复杂度:O(n),空间复杂度:O(1)。
  • 分治法。时间复杂度:O(nlogn),空间复杂度:O(logn)。

题解

买卖股票的最佳时机

思路

  • 动态规划算法,遍历元素,如果是在历史最低点买入的,则当天卖出时利润最高。故记录一个历史最低买入。时间复杂度:O(n),空间复杂度:O(1)。

题解

买卖股票的最佳时机II

思路

  • 从卖出看买入,如果第二天价格下降,则当天卖出,并且记录历史最低买入。第二天为新的历史最低买入。注意天数为最后一天时,如果持续增,最后一天必定卖出。时间复杂度:O(n),空间复杂度:O(1)。
  • 贪心算法,从买入看卖出,连续天只要上涨就记入利润,直到不再上涨,则卖出。把可能跨越多天的买卖都化解成相邻两天的买卖。时间复杂度:O(n),空间复杂度:O(1)。

题解

爬楼梯

思路

  • 斐波那契数列,迭代法。时间复杂度:O(n),空间复杂度:O(1)。

题解

斐波那契数

思路

  • 斐波那契数列,迭代法。时间复杂度:O(n),空间复杂度:O(1)。
  • 斐波那契数列,递归法。如果数据大,会超时。

题解

整数反转

思路

  • 取模。时间复杂度:O(lgn),空间复杂度:O(1)。

题解

回文数

思路

  • 比较一半:通过取整和取余操作获取整数中对应的数字进行比较,首尾相应数字比较。时间复杂度:O(lgn),空间复杂度:O(1)。
  • 比较一半:将数字进行对折后看能否一一对应,即取出后半段数字进行翻转。时间复杂度:O(lgn),空间复杂度:O(1)。
  • 将整数转为字符串。反转字符串,跟原字符串比较。
  • 将整数转为字符串。字符串首尾相应位数进行比较。

题解

合并两个有序数组

思路

  • 从m+n-1位置到0位置逆序依次存入。时间复杂度:O(m+n),空间复杂度:O(m)。

题解

x的平方根

思路

  • 二分查找。时间复杂度:O(logn),空间复杂度:O(1)。
  • 牛顿迭代法。时间复杂度:O(logn),空间复杂度:O(1)。

题解

字符串

思路(字符串)

  • 空间换时间,借助哈希表。
  • 中间扩展。

最长回文串

思路

  • 借助map存储字符的个数,最长回文串长度为字符的最大偶数求和再加一。时间复杂度:O(n),空间复杂度:O(s)。

题解

最长回文子串

思路

  • 中心扩展法,回文子串长度为奇数、偶数时分别考虑。时间复杂度:O(n^2),空间复杂度:O(1)。

题解

链表

思路(链表)

  • 迭代。从头开始遍历。
  • 递归。使用栈空间,需要额外的空间复杂度。
  • 快慢指针。

反转链表

思路

  • 迭代。从头遍历,箭头反转。时间复杂度:O(n),空间复杂度:O(1)。
  • 递归。使本节点的下一节点的下一节点改成本节点,原头节点指向NULL。时间复杂度:O(n),空间复杂度:O(n)。

题解

环形链表

思路

  • 快慢指针。时间复杂度:O(n),空间复杂度:O(1)。

题解

合并两个有序链表

思路

  • 迭代。时间复杂度:O(m+n),空间复杂度:O(1)。

题解

二叉树

思路(二叉树)

  • 迭代。
  • 递归。使用栈空间,需要额外的空间复杂度。

二叉树的层次遍历(逐层,从左到右)

思路

  • 迭代。借助队列,先进先出。时间复杂度:O(n),空间复杂度:O(n)。

题解

翻转二叉树

思路

  • 递归。时间复杂度:O(n),空间复杂度:O(n)。
  • 迭代。借助队列,先进先出。时间复杂度:O(n),空间复杂度:O(n)。

题解

栈和队列

思路(栈和队列)

用两个栈实现队列

思路

  • 一个栈用于push,一个栈用于pop。插入:时间复杂度:O(1),空间复杂度:O(1)。删除:时间复杂度:O(n),空间复杂度:O(n)。

题解

algorithm's People

Contributors

seajune avatar

Watchers

 avatar

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.