
算法
浮华饰浮华
小渣渣
展开
-
自定义二叉搜索树
什么是二叉搜索树?1.定义二叉搜索树类(最基本节点对象Node)public class BinarySearchTree { class Node{ int val; Node left; Node right; public Node(int val) { this.val = val; } } private Node root;}2.Insert方法(LeetCode701)/*** insert* 1.判断根节点是否存在,不原创 2021-03-02 09:02:03 · 220 阅读 · 0 评论 -
分割数组最大值
给定一个非负整数数组和一个整数m,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。注意:数组长度n满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是...原创 2019-12-04 13:47:53 · 600 阅读 · 0 评论 -
简单背包问题
简单背包问题有一个容量为v的背包,从N件物品中选择一些放入背包中,每件物品的重量为w[i],价格为v[i].怎么选择合适的物品使得背包内物品的总价值最大.分析这个问题中每个物品可供选择的次数是0或1.即简单背包问题.若可选择次数为n(n为一个有效的数字),则称之为有界背包问题.若可选择次数无限,则称之为无界背包问题.所有的背包问题都可以变换为简单背包问题.在本题中,如果...原创 2019-12-04 11:27:13 · 567 阅读 · 0 评论 -
LEET CODE 224.Basic Calculator
Implement a basic calculator to evaluate a simple expression string.The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty s...原创 2019-05-28 09:57:44 · 141 阅读 · 0 评论 -
LEET CODE 227.Basic CalculatorII
Implement a basic calculator to evaluate a simple expression string.The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should tr...原创 2019-06-10 14:46:17 · 124 阅读 · 0 评论 -
如何保证一个链表(List)元素的有序性
在链表插入元素时保证链表的有序性.通过二分法来定位待插入元素的位置 public void addNum(int num) { if(list.size()==0){ list.add(num); return; } int l = 0; int r = list.size()-...原创 2019-07-08 09:20:03 · 1288 阅读 · 0 评论 -
编程语言的巧妙之处-位运算
如何不使用+,-运算符号计算两个数之和?在编程语言中除了+,-等符号运算,还有位运算.^,异或,相同为0,不同为1.比如 : 2^3 0 0 1 0 0 0 1 1 _______ 0 0 0 1 (相同出0,不同出1,结果=1) 2^3 = 1; ...原创 2019-08-30 15:22:01 · 219 阅读 · 0 评论 -
leetcode 372 超级次方
你的任务是计算ab对1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入: a = 2, b = [3]输出: 8示例2:输入: a = 2, b = [1,0]输出: 1024来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/super-pow著作权归领扣网络所有。商业...原创 2019-09-02 18:03:12 · 553 阅读 · 0 评论 -
蓄水池采样算法
一般来说,如果从1000个数字里随机抽取100个数字的算法是很简单的,比如通过随机算法从[0,1000)中随机抽取100个数即可.但是当我们遇到数字总量未知的时候,就需要采用蓄水池采样算法.蓄水池采样算法假设数据序列的规模为n,需要采样的数量的为k。首先构建一个可容纳k个元素的数组,将序列的前k个元素放入数组中。然后从第k+1个元素开始,以k/n的概率来决定该元...原创 2019-09-05 15:41:51 · 266 阅读 · 0 评论 -
390. 消除游戏题解
给定一个从1 到 n 排序的整数列表。首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。返回长度为 n 的列表中,最后剩下的数字。示例:输入:n = 9,1 2 3 4 5 6 7 8 92 4...原创 2019-10-09 16:48:57 · 868 阅读 · 0 评论 -
Product of Array Except Self
Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].Example:Input: [1,2,3,4]Output: ...原创 2019-05-07 13:57:34 · 119 阅读 · 0 评论 -
LEETCODE 402. 移掉K位数字解题思路
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = "10200...原创 2019-04-24 10:52:37 · 416 阅读 · 0 评论 -
排序算法之基数排序
基数排序概念基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定...原创 2019-02-20 11:21:53 · 612 阅读 · 0 评论 -
排序算法之堆排序
堆排序原理优先队列可以用于以时间的排序.基于该思想的算法叫做堆排序.堆排序是指,将N个元素按照(max)堆的方式存入数组中,这个过程的时间复杂度为,然后再经过次deleteMax,每次deleteMax都会将堆的top与堆末位置相交换,这样一来大大节约了算法的空间开销,由于每次deleteMax花费时间,因此总的运行时间为.堆排序策略1.将原始数组构建为Max堆2.循环N-1次删除...原创 2019-01-11 15:40:52 · 191 阅读 · 0 评论 -
排序算法之归并排序
归并排序原理该算法的基本操作是合并两个已排序的表.因为两个表是已排序的,所以若将输出放到第三个表中,结果也是排好序的,合并算法可以通过对输入数据一趟排序来完成.递归调用分离的两个子表可求得结果.归并算法策略基本的合并算法是取两个输入数组A和B,一个输出数组C,以及3个计数器Actr,Bctr,Cctr,它们的初始位置对应数组的开始端.A[Actr]和B[Bctr]中较小者被拷贝到C中的...原创 2019-01-12 09:42:37 · 167 阅读 · 0 评论 -
排序算法之快速排序
快速排序原理像归并排序一样,快速排序也是一种分治的递归排序.它是指从待排序数组中选取枢纽元,遍历数组,将小于枢纽元的元素放入S1,大于枢纽元的元素放入S2,然后再对S1和S2进行递归的调用,最后返回的结果是排序后的数组.快速排序策略举一个经典快速排序的例子,将数组S排序的基本算法由下列四步组成:1.如果S中元素个数是0或者1,则返回.2.取S中任一元素v,称之为枢纽元.3....原创 2019-01-12 16:55:09 · 509 阅读 · 0 评论 -
深度优先遍历+回溯算法
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]深度优先遍历(DFS-deep first search),指从根节点开始搜索到所有叶节点.回溯算法(backtracking),指从问题的某一种状态(初始状态)出发,搜索从翻译 2019-01-08 15:05:52 · 2687 阅读 · 0 评论 -
排序算法之插入排序
插入排序原理插入排序由N-1趟排序组成.对于p=1到N-1趟,插入排序保证从位置0到位置p上的元素为已排序状态.插入排序利用了这样的事实:已知位置0到位置p-1上元素已经处于排序状态.插入排序策略原始数组 34 8 64 51 32 21 移动的位置 p=1趟之后 8 34 64 51 32 21 ...原创 2019-01-10 10:06:41 · 144 阅读 · 0 评论 -
排序算法之希尔排序(缩减增量排序)
希尔排序原理希尔排序通过比较相距一定间隔的元素来工作;各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.希尔排序增量序列希尔排序使用一个序列,,······,,叫做增量序列.在使用增量的一趟排序之后,对于每一个i我们都有a[i]<=a[i+](此时不等式是有意义的);所有相隔的元素都被排序.希尔排序的一个重要性质是,一个排序的文件保持它的排序性,否则该...原创 2019-01-10 11:13:43 · 1167 阅读 · 3 评论 -
LRU缓存机制
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(k...原创 2019-01-31 15:50:09 · 535 阅读 · 0 评论 -
动态规划(dynamic programming)
概念动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,...翻译 2019-01-29 17:39:08 · 348 阅读 · 0 评论 -
二叉树搜索算法集合
该篇总结关于二叉树前序遍历,中序遍历,后序遍历的各种实用算法(包括递归和遍历)。先序遍历先序遍历又称前序遍历,先序遍历(DLR),是二叉树遍历的一种,也叫做前序周游,可记做根左右。先序遍历首先访问根结点然后遍历左子树,最后遍历右子树。递归表达 public List<Integer> preorderTraversal(TreeNode root) { ...原创 2019-01-30 17:26:35 · 783 阅读 · 0 评论 -
Best Time to Buy and Sell Stock III
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获...原创 2018-12-19 17:06:15 · 109 阅读 · 0 评论