zoukankan      html  css  js  c++  java
  • 算法

      

    排序

    比较排序

    冒泡排序

    重复地走访过要排序的数列,每次比较相邻两个元素,如果它们的顺序错误就把它们交换过来,越大的元素会经由交换慢慢“浮”到数列的尾端。

    归并排序

    分解待排序的数组成两个各具 n/2 个元素的子数组,递归调用归并排序两个子数组,合并两个已排序的子数组成一个已排序的数组。

    快速排序

    在待排序的数组选取一个元素作为基准,将待排序的元素进行分区,比基准元素大的元素放在一边,比其小的放另一边,递归调用快速排序对两边的元素排序。选取基准元素并分区的过程采用双指针左右交换。

    线性排序

    计数排序

    根据待排序的数组中最大和最小的元素,统计数组中每个值为i的元素出现的次数,存入数组C的第i项,对所有的计数累加,然后反向填充目标数组。

    桶排序

    找出待排序数组中的最大值max、最小值min,数组ArrayList作为桶,桶里放的元素用ArrayList存储。计算每个元素 arr[i] 放的桶,每个桶各自排序,遍历桶数组,把排序好的元素放进输出数组。

    二叉树

    顺序遍历

    先序遍历: 根->左->右

    中序遍历: 左->根->右

    后序遍历: 左->右->根

    层次遍历

    左右翻转

    最大值

    最大深度

    最小深度

    平衡二叉树

    平衡二叉树每一个节点的左右两个子树的高度差不超过1

    链表

    删除节点

    翻转链表

    中间元素

    判断是否为循环链表

    合并两个已排序链表

    链表排序

    删除倒数第N个节点

    两个链表是否相交

    栈 / 队列

    带最小值操作的栈

    实现一个栈, 额外支持一个操作:min() 返回栈中元素的最小值

    有效括号

    给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]" 则是无效的括号。

    用栈实现队列

    逆波兰表达式求值

    在反向波兰表示法中计算算术表达式的值, ["2", "1", "+", "3", "*"] -> (2 + 1) * 3 -> 9

    二分

    二分搜索

    X的平方根

    哈希表

    两数之和

    给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。需要实现的函数twoSum需要返回这两个数的下标。

    连续数组

    给一个二进制数组,找到 0 和 1 数量相等的子数组的最大长度

    最长无重复字符的子串

    用HashMap记录每一个字母出现的位置。设定一个左边界, 到当前枚举到的位置之间的字符串为不含重复字符的子串。若新碰到的字符的上一次的位置在左边界右边, 则需要向右移动左边界

    最多点在一条直线上

    给出二维平面上的n个点,求最多有多少点在同一条直线上

    二叉搜索树

    验证二叉搜索树

    第K小的元素

    增加getCount方法来获取传入节点的子节点数(包括自己),从root节点开始判断k值和子节点数的大小决定递归路径是往左还是往右。

    数组 / 双指针

    加一

    给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。该数字按照数位高低进行排列,最高位的数在列表的最前面。

    删除元素

    给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

    删除排序数组中的重复数字

    在原数组中“删除”重复出现的数字,使得每个元素只出现一次,并且返回“新”数组的长度。

    我的日程安排表

    合并排序数组

    合并两个排序的整数数组A和B变成一个新的数组。可以假设A具有足够的空间去添加B中的元素。

    贪心

    买卖股票的最佳时机

    假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。

    买卖股票的最佳时机 II

    给定一个数组 prices 表示一支股票每天的价格。可以完成任意次数的交易, 不过不能同时参与多个交易,设计一个算法求出最大的利润。

    最大****子****数组

    给定一个整数数组,找到一个具有最大和的子数组,返回其最大和

    主元素

    给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一(可以假设数组非空,且数组中总是存在主元素)。

    字符串处理

    生成括号

    给定 n,表示有 n 对括号, 请写一个函数以将其生成所有的括号组合,并返回组合结果。

    Excel表列标题

    给定一个正整数,返回相应的列标题

    翻转游戏

    给定一个只包含两种字符的字符串:+和-,你和你的小伙伴轮流翻转"++"变成"--"。当一个人无法采取行动时游戏结束,另一个人将是赢家。编写一个函数,计算字符串在一次有效移动后的所有可能状态。

    翻转字符串中的单词

    给定一个字符串,逐个翻转字符串中的每个单词

    转换字符串到整数

    最长公共前缀

    回文数

    动态规划

    单词拆分

    给定字符串 s 和单词字典 dict,确定 s 是否可以分成一个或多个以空格分隔的子串,并且这些子串都在字典中存在。

    爬楼梯

    假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

    打劫房屋

    假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,在不触动报警装置的情况下, 你最多可以得到多少钱 。

    编辑距离

    给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。

    乘积最大****子****序列

    矩阵

    螺旋矩阵

    给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。

    判断数独是否合法

    旋转图像

    给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像。

    二进制 / 位运算

    落单的数

    给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

    格雷编码

    其他

    反转整数

    LRU缓存策略

  • 相关阅读:
    Xamarin教程索引页
    WiX Toolset 教程索引页
    Orchard教程索引页
    电脑突然断电,代码文件损坏,如何恢复,求解
    设置TextBlock默认样式后,其他控件的Text相关属性设置失效问题
    【共享】代码开发辅助工具
    WPF中自定义标题栏时窗体最大化处理之WindowChrome
    WPF中窗体最大化问题处理
    PowerShell执行脚本时“系统上禁止运行脚本”问题解决
    WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题
  • 原文地址:https://www.cnblogs.com/zmwy/p/13399690.html
Copyright © 2011-2022 走看看