
算法
LaZY_apple
这个作者很懒,什么都没留下…
展开
-
《算法设计与分析基础 第三版》(Java代码)第一章 绪论(编辑中)
文章目录求两个数最大公约数习题求根号n的向下取整的值,n为非负整数求两个数最大公约数 /*** * 欧几里得算法: * gcd(m,n) = gcd(n,m mod n) (m mod n 表示 m 除以 n 的余数) * 如果m mod n == 0 则 n为结果 * @param m * @param n * @return */ public static int alg1(int m, int n){原创 2020-05-31 11:58:37 · 616 阅读 · 0 评论 -
LeetCode14.最长公共前缀
题目思路分治法代码/**LeetCode14.最长公共前缀 * @author LaZY(李志一) * @create 2019-04-23 10:22 */public class Solution { public String longestCommonPrefix(String[] strs){ if(strs == null || strs.le...原创 2019-04-23 10:54:24 · 132 阅读 · 0 评论 -
LeetCode155.最小栈
题目思路额外准备一个栈(min栈),存最小值。每次压入新的值都和min栈的栈顶比较(第一次特殊),取两者最小值压入min栈。注意:栈中压入一个新数,min栈也要压入。无论是是否比min栈的栈顶小。注意:栈中弹出一个新数,min栈也要弹出。最终,栈中最小值是min栈的栈的顶。代码/**最小栈 * @author LaZY(李志一) * @create 2019-04-18 20...原创 2019-04-18 20:58:11 · 105 阅读 · 0 评论 -
LeetCode230.二叉搜索树中第K小的元素
参考链接:https://blog.youkuaiyun.com/yuanliang861/article/details/84640069题目:解法一:中序遍历很好理解,网上答案很多,不废话。解法二:二分查找题目分析:二叉搜索树特点:左孩子值小于根节点,根节点值小于右孩子,那么树中最小节点一定是根节点最左边孩子。思路:如果根节点的左子树数量为k-1,那么第k小的为根节点。如果根...原创 2019-04-24 10:47:27 · 541 阅读 · 0 评论 -
图的数据结构
图的表示(数组)图的数据结构/*** * 图 */public class Graph { public HashMap<Integer,Node> nodes;//点 public HashSet<Edge> edges;//边 public Graph() { nodes = new HashMap<>(); edges = ne...原创 2019-05-05 10:16:11 · 486 阅读 · 0 评论 -
图的遍历(广度优先遍历、深度优先遍历)
图的数据结构https://blog.youkuaiyun.com/weixin_43093501/article/details/89840219广度优先遍历思路准备:队列、set:查重1.将图的起始节点添加到队列中,同时加到set中2.只要队列中有元素,就执行代码3.弹出队列中的元素,并打印,4.将该元素的邻居节点集合全部加入到队列中(重复的不加)代码public static vo...原创 2019-05-05 13:51:42 · 316 阅读 · 0 评论 -
项目安排问题
题目:思路:贪心策略:项目结束时间早的优先,因为选择此项目而耽误的项目淘汰。步骤:按项目结束时间给所有项目排序,执行上述贪心策略代码:public class Code_06_BestArrange { public static class Program { public int start; public int end; public Progra...原创 2019-04-25 09:47:51 · 262 阅读 · 0 评论 -
汉诺塔问题递归解法
思路先移动最底层到其上的部分到辅助位置,再移动最底层到要求位置,将辅助位置的移动到最终位置。代码 public static void func(int rest, int down, String from, String help, String to) { if (rest == 1) { System.out.println("move " + down + " fr...原创 2019-04-25 10:27:53 · 345 阅读 · 0 评论 -
LeetCode53.最大子序和(递归)
题目:代码:public class Solution { int max = Integer.MIN_VALUE; public int maxSubArray(int[] nums) { if(nums == null || nums.length == 0){ return 0; } if(num...原创 2019-05-14 14:01:27 · 503 阅读 · 0 评论 -
LeetCode122. 买卖股票的最佳时机 II(动态规划、贪心算法)
题目:贪心算法/*** * 贪心算法:只要第二天的价格比今天高,就第一天买,第二天卖 * @param prices * @return */ public int maxProfix(int[] prices) { if (prices == null || prices.length == 0 || prices.lengt...原创 2019-05-16 14:28:46 · 877 阅读 · 0 评论 -
LeetCode9. 回文数
题目:结果:思路:1.小于0,不可能是回文数。2.正数,就计算他的反转数:原数对10取模+之前计算结果 * 10代码:public static boolean isPalindrome(int x){ if(x < 0){ return false; } int converse = 0;//反转数...原创 2019-05-13 09:07:52 · 198 阅读 · 0 评论 -
金条切割
题目:思路所有元素看成为节点,最小两个节点形成一个新节点,值为两个节点的和。新生成的节点和数组中其余最小的数结合成新节点。最终非叶子节点的和即为代价代码 public static int lessMoney(int[] arr) { PriorityQueue<Integer> pQ = new PriorityQueue<>(); for (int...原创 2019-04-18 10:54:04 · 311 阅读 · 0 评论 -
LeetCode502.ipo
题目思路构建实体类(项目类): 属性:成本、(纯)利润创建大根堆和小根堆(使用优先队列和比较器)根据成本,将所有项目放入小根堆,(这样每次取出的就是成本最低的项目)。项目成本不超过资金,根据利润,取出的项目放入大根堆,(这样每次取出的就是利润最大的项目)。当项目数量大于k个,大根堆中无项目,结束。代码public class Code_03_IPO { public...原创 2019-04-18 10:49:58 · 286 阅读 · 0 评论 -
LeetCode213.2的幂
题目小学生解法public boolean isPowerOfTwo(int n) { if(n == 1){ return true; } if(n < 1){ return false; } if(n % 2 > 0){ re...原创 2019-04-16 09:08:26 · 114 阅读 · 1 评论 -
LeetCode104.二叉树的最大深度
题目思路先查找左子树深度,再查找右子树深度。取两者最大值+1,则为当前节点为根节点的(子)数的高度。代码:/** * @author LaZY(李志一) * @create 2019-04-16 11:07 */public class Solution { public class TreeNode { int val; TreeNod...原创 2019-04-16 13:19:18 · 109 阅读 · 0 评论 -
LeetCode344.反转字符串
题目思路数组中头尾元素互换代码/** * @author LaZY(李志一) * @create 2019-04-16 13:25 */public class Solution { public void reverseString(char[] s){ if(s == null || s.length == 0){ return...原创 2019-04-16 13:38:09 · 397 阅读 · 0 评论 -
LeetCode88.合并两个有序数组
参考链接:https://blog.youkuaiyun.com/peipeiluo/article/details/79994369题目:思路:思路1:插入排序 (不解释)思路2:合并、快速排序(不解释)思路3: 双指针 :从两个数组(有元素的)末尾开始遍历结果大的元素存放在nums1的最末尾,同时两个指针向前移动其中一个数组的指针移动到开头,则将另一个数组剩下的元素填充到n...原创 2019-04-20 18:53:41 · 135 阅读 · 0 评论 -
LeetCode15三数之和
题目:思路:虽然上一种做法有问题,不过双指针的想法还是正确的。所以,应该换个思路。先对列表进行排序,然后从头到尾遍历。这样每次都固定住一个值,而不是用双指针来解决三值问题,好像是可行的。在固定一个值之后,剩下的有序列表中,用双指针法寻找两个值的和是否是固定值的负数。这样指针移动的标准也就出来了。如下图:当两值之和大于固定值的负数时,右边的指针左移当两值之和小于固定值的负数时,左边指...原创 2019-04-13 14:15:02 · 131 阅读 · 1 评论 -
LeetCode.26从排序数组中删除重复项
题目:思路:因为是有序数组,只需要遍历一次,后一个和前一个比较。同时要修改数组,利用记录元素个数的变量当索引指针,将新查找到的元素从上一个元素的后面开始覆盖。代码:1.这个慢(因为我把重复元素移动到了末尾)public class Solution { public int removeDuplicates(int[] nums){ int count = 1;...原创 2019-04-21 19:38:46 · 126 阅读 · 0 评论 -
LeetCode136.只出现一次的数
题目:小学生做法 :代码public int singleNumber(int[] nums){ if(nums.length == 1){ return nums[0]; } Arrays.sort(nums); for (int i = 1; i < nums.length-1; i++) {...原创 2019-04-17 14:50:14 · 110 阅读 · 1 评论 -
LeetCode142. 环形链表 II、链表相交问题
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。 示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node...原创 2019-04-15 09:04:22 · 451 阅读 · 1 评论 -
LeetCode169.求众数
转载链接:https://blog.youkuaiyun.com/qq_41231926/article/details/86479848原题链接:https://leetcode-cn.com/problems/majority-element/description/题目描述:知识点:哈希表、分治算法、位运算、摩尔投票法思路一:用哈希表记录各个数字出现的次数时间复杂度...转载 2019-04-17 21:30:05 · 122 阅读 · 0 评论 -
LeetCode148.链表排序
题目思路题目要求:O(N*logN)时间复杂度,会很敏感的想到归并排序。接下来要说的就是根据归并排序找到中间点,这个困扰了我,虽然做了很多题,但还是忘记了快慢指针!找到中间点以后就是合并部分,这个就是合并两个链表/数组的问题总体思路还是很清晰,剩下就是代码能力了code易错点:获取到中间点后,在合并的时候,前半部分要去掉中间点之后的部分代码public class Soluti...原创 2019-04-26 22:30:10 · 123 阅读 · 0 评论 -
LeetCode160.链表相交
题目解题思路情况:1.单链表都有环,且相交。2.单链表都有环,不相交。3.单链表都没环,且相交。4.单链表都没环,不想交。5.单链表只有一个有环,且相交。(不可能)6.单链表只有一个有环,不相交。简单思路:使用hash表判断是否重复。最优解:1.先判断是否有环:是有快慢指针,如果有环,必相遇。且相遇后,快指针回到开头,速度改为1;慢指针继续动,相遇时,为第一个入环节点...原创 2019-04-15 22:28:57 · 285 阅读 · 1 评论