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缓存策略

  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/zmwy/p/13399690.html
Copyright © 2011-2022 走看看