算法
东方文艺复兴
嗨,你好!我是东方文艺复兴,一个满怀热情的程序员,疯狂热爱计算机科学,我对各种编程语言都有着浓厚的兴趣,从老牌的C、C++、Java,到新兴的Python、JavaScript,甚至包括那些呆萌的小众语言,我都非常感兴趣,所谓兴趣就是最好的老师!
我深信,编程不只是一门科学,它也是一种艺术,是一种可以让我们创造、进行思考、解决问题并帮助他人的魔法。我渴望用我的编程技术去帮助更多的人,用代码来解决实际问题,用软件来改变世界。
我的目标是,用我手中的键盘把这个世界敲得更加美好!!!
展开
-
从前序遍历和后序遍历恢复二叉树
叶子节点是没有子节点的节点,在树的构建过程中,正确识别叶子节点是非常重要的,因为它标志着某个分支的结束。如果无法正确判断叶子节点,就可能导致树的结构重建错误。在完全二叉树`的情况下,我们可以根据前序遍历和后序遍历的结果来重建这棵树。由于在完全二叉树中,每个节点都有明确的位置,我们可以利用这一特性来确定节点的位置。我们可以通过前序遍历和中序遍历确定地恢复一棵二叉树,但是无法确定地 从前序遍历和后序遍历恢复二叉树,因为这两种遍历方式不包含足够的信息来区分某些树的结构。原创 2024-02-07 23:37:22 · 547 阅读 · 0 评论 -
判断矩形重叠-算法-先按左下角排序,然后找到不重叠的情况即可
LeetCode-836. 矩形重叠矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。如果相交的面积为 正 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:tr原创 2022-05-31 09:18:01 · 761 阅读 · 1 评论 -
移位运算符<< >>傻瓜式测试用例
千万要牢记: 左边是被操作数,右边是移动位数(这对左移符和右移符来说都是一样的)public class Test { // 从极限出发,傻瓜式测试 public static void main(String[] args) { /*** 左移测试 ***/ // 被操作数 左移箭头 左移位数 二进制 十进制 System.out.println(1 << 0); // 1 向左移0位,原创 2022-05-24 11:27:53 · 236 阅读 · 0 评论 -
异或运算经典算法题--只出现一次的数字
136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4class Solution { public int singleNumber(int[] nums) { int single = 0; for (int转载 2022-05-24 06:29:20 · 209 阅读 · 0 评论 -
用极限思维秒破134. 加油站 -LeetCode算法
134. 加油站https://leetcode-cn.com/problems/gas-station/solution/tan-xin-dong-hua-tu-jie-dai-ma-jian-ji-b-na6b/https://xiaochen1024.com/courseware/60b4f11ab1aa91002eb53b18/61963ce5c1553b002e57bf14利用极限思维理解。class Solution { /** 采用极限思维秒破 *原创 2022-03-30 09:06:36 · 367 阅读 · 0 评论 -
跳跃游戏-算法-简单易懂的解法
跳跃游戏I:问题:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不原创 2022-03-28 07:07:35 · 4932 阅读 · 0 评论 -
论使用二叉树结构对青蛙跳台阶问题的细致推导
剑指 Offer 10- II. 青蛙跳台阶问题原题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1坐在电脑前,精神抖擞,两眼发呆,突然,爆发出一个灵感,我应该用二叉树来推导出青蛙跳台阶这个问题。为什么我不满足他们说的那种原创 2022-03-09 23:45:08 · 276 阅读 · 0 评论 -
Java:一道理解基本数据类型和对象(引用)类型最好的LeetCode题目
题目:257. 二叉树的所有路径自己写的:path传递的是字面值(String是基本数据类型),List<String> res传递的是地址(对象类型)class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> res = new ArrayList<>(); dfs(root, "", res);原创 2022-03-09 08:58:04 · 392 阅读 · 0 评论 -
LeetCode题目输入的树结构是层次(广度)遍历的结构
感觉自己好傻,一直看不懂输入的数组是前中后序的哪一种,想了半天,后来点击“控制台”的“”测试用例“,然后看到“树结构可视化”,点开之后,输入几个测试用例看看,才恍然大悟,题目中输入的树结构是层次(广度)遍历的啊!...原创 2022-03-03 22:58:52 · 106 阅读 · 0 评论 -
正则表达式 .* (正确理解通配符.和通配符*)
在正则表达式中,包括.通配符和*通配符:点号.可以匹配一个任意字符,仅1次。星号*可以复制它之前那个字符任意次数,包括0次,即[0, +∞]次。举例1:模式串P:.a*m文本串S:zaaam匹配结果:成功原因:P的.匹配S的z,P的*复制了3次P的a 去匹配了S的3个a,P的m匹配了S的m举例2:模式串P:.a*m文本串S:cm匹配结果:成功原因:P的.匹配S的c,P的*复制了0次P的a (相当于a被*消除了)P的m匹配了S的m举例3:模式串P:a.a文本串S:aa原创 2022-02-15 21:40:41 · 17815 阅读 · 0 评论 -
LeetCode: 1179. 重新格式化部门表
原题:https://leetcode-cn.com/problems/reformat-department-table/# Write your MySQL query statement belowselect id, sum(case when month = 'Jan' then revenue end) as Jan_Revenue, sum(case when month = 'Feb' then revenue end) as Feb_Revenue, sum(原创 2021-03-12 14:21:36 · 111 阅读 · 0 评论 -
LeetCode:626. 换座位
原题:https://leetcode-cn.com/problems/exchange-seats/# Write your MySQL query statement belowselect ( case when id&1 =1 and id != counts then id + 1 when id&1 =1 and id = counts then id else id - 1原创 2021-03-12 13:08:27 · 104 阅读 · 0 评论 -
LeetCode: 627. 变更性别
原题:https://leetcode-cn.com/problems/swap-salary/个人解法:update salary set sex = if(sex='m', 'f', 'm');官方解法:使用case−when使用case- when使用case−whenUPDATE salarySET sex = CASE sex WHEN 'm' THEN 'f' ELSE 'm' END;小结:在数据库中,非黑即白,非白即灰的原创 2021-03-12 11:33:35 · 126 阅读 · 0 评论 -
LeetCode: 620. 有趣的电影
原题:https://leetcode-cn.com/problems/not-boring-movies/# Write your MySQL query statement belowselect id, movie, description, ratingfrom cinemawhere description <> 'boring' and id&1order by rating desc;<>和!=是一样的而id&1是用来判断奇数...原创 2021-03-12 10:51:38 · 100 阅读 · 0 评论 -
位与:一个数&1的结果
在计算机中,位与的符号是&,运算过程是false&false=false, true&false=false, true&true=true故任何一个数&1的结果有:0&1=01&1=12&1=03&1=1………1234&1=04321&1=1可以看出一个奇数(十进制)位与1的结果是1,一个偶数(十进制)位与1的结果是0我们分析一下几个例子,3和987都是十进制数:3&1在计算过程是:原创 2021-03-12 10:38:15 · 11520 阅读 · 5 评论 -
LeetCode: 596. 超过5名学生的课
原题:https://leetcode-cn.com/problems/classes-more-than-5-students/个人解法速度比较慢:select classfrom ( select * from courses group by student, class) as temp group by classhaving count(class) >= 5;将分组语法group by变为去重的工具官方解法SELECT classF原创 2021-03-11 10:30:41 · 80 阅读 · 0 评论 -
LeetCode: 197. 上升的温度
原题:https://leetcode-cn.com/problems/rising-temperature/妙就妙在DateDiff() 函数,不过时间复杂度太高,太耗时,还需要优化,就先这样,喵~select w1.idfrom Weather w1join Weather w2on Datediff(w1.recordDate, w2.recordDate) = 1and w1.Temperature > w2.Temperature;...原创 2021-03-10 20:35:36 · 87 阅读 · 0 评论 -
LeetCode: 184. 部门工资最高的员工
原题:https://leetcode-cn.com/problems/department-highest-salary/个人解法:利用窗口函数:利用窗口函数:利用窗口函数:select Department.Name as Department, e1.Name as Employee, e1.Salaryfrom ( select * from ( select *, dense_rank() over(partition by DepartmentId o原创 2021-03-07 10:15:00 · 116 阅读 · 2 评论 -
团伙分类:有一份数据部分如下,比如:刘备和关羽有关系,说明他们是一个团伙
题目:有一份数据部分如下,比如:刘备和关羽有关系,说明他们是一个团伙,刘备和张飞也有关系,那么刘备,关羽,张飞归为一个团伙,以此类推。用自己熟悉的编程语言根据人员和相关人员计算出团伙分类:人员相关人员刘备关羽刘备张飞张飞诸葛亮曹操司马懿司马懿张辽曹操曹丕计算输出结果如下:人员团伙分类刘备1张飞1关羽1诸葛亮1曹操2司马懿2张辽2曹丕2参考答案01:尝原创 2020-11-03 20:58:39 · 1693 阅读 · 0 评论 -
VS Code中安装LeetCode插件
安装插件leetcode,愉快开心刷题~原创 2019-12-20 09:53:43 · 318 阅读 · 0 评论 -
算法 高质量社区
http://ddrv.cn/原创 2019-12-16 19:24:32 · 89 阅读 · 0 评论 -
在数组中插入、删除、输出元素
来源:《漫画算法》第2章第1部分作者:魏梦舒数组读取单个元素和更新单个元素的复杂度是O(1)数组扩容的时间复杂度是O(n) 删除操作时间复杂度是O(n)package chapter2.part1;import org.junit.Test;public class MyArray { private int[] array;//初始化数组对象,...原创 2019-05-19 01:35:30 · 471 阅读 · 0 评论 -
链表的插入、删除和输出
来源:githubpackage chapter2.part1;import org.junit.Test;public class MyLinkedList { //头节点指针 private Node head; //尾节点指针 private Node last; //链表实际长度 private int size; /*...原创 2019-05-19 21:31:21 · 439 阅读 · 0 评论 -
队列的入队、出队和输出操作
来源:程序员小灰数组长度空间固定;循环队列;数组中:(下标+1)除以数组长度得到的是下一个元素的下标,形成循环的现象。如:rear =(rear+1)%array.length;//队尾下标后移front =(front+1)%array.length;//队头下标后移i=(i+1)%array.length;//i的下标后移package chapter2.part...原创 2019-05-20 01:27:58 · 7933 阅读 · 0 评论 -
一个for循环和它的while循环形式有什么区别?
在典型的for循环中,递增变量一般在循环结束之后都是不可用的;但在它等价的while循环中,递增变量在循环结束之后仍然是可用的。这个区别是常常使用while而非for循环的主要原因。package Algorithm4;import org.junit.Test;public class ForAndWhile { @Test public void testDiff()...原创 2019-05-14 23:00:34 · 320 阅读 · 0 评论 -
斐波那契数列之递归函数时间测试
在斐波那契数列递归中,因为每次计算第n位的结果时,都要调用 f(n-1)+f(n-2),而f(n-1)又要调用f(n-1-1)+f(n-1-2)....等f(n-1)计算出来了,又要计算f(n-2),f(n-2)又要调用f(n-2-1)+f(n-2-2)...如此反复下去,随着n的增大,计算f(n)的时间必然膨胀,时间复杂度:【算法16】递归算法的时间复杂度终结篇空间复杂度:O(n)故...原创 2019-05-21 15:39:26 · 977 阅读 · 0 评论 -
二叉堆元素的上浮和下沉
参考:程序员小灰package chapter3.part3;import java.util.Arrays;import javax.swing.text.AsyncBoxView.ChildState;import org.junit.Test;public class HeapAdjust { @Test public void printUpAdju...原创 2019-05-25 01:24:54 · 792 阅读 · 1 评论 -
二叉树创建与遍历(LinkedList+递归思想)
自定义的节点类,TreeNode:package chapter3;public class TreeNode { int data; TreeNode leftNode; TreeNode rightNode; public TreeNode(int data) { this.data = data; }}package chapter...原创 2019-05-21 23:29:42 · 519 阅读 · 0 评论 -
计算机对乘法和加法的运行时长比较
本程序可能属特例。public class CalculationSpeedTest { @Test public void getTime() { long begin = System.nanoTime(); int sum = 0; int t = 0; for(int i=0; i<10; i++) { t++; sum = su...原创 2019-05-12 23:50:41 · 3336 阅读 · 0 评论 -
i++和++i的值和运算问题
i++;先值,后运算++i;先运算,后值package chapter3.part4;import org.junit.Test;public class TestFuHao { @Test public void test() { int i = 1; System.out.println(i++);//先值,后运算 //等同于// System.out...原创 2019-05-26 02:23:41 · 462 阅读 · 0 评论 -
优先队列
参考:程序员小灰package chapter3.part4;import java.util.Arrays;public class PriorityQueue { private int[] array; private int size; public PriorityQueue(){ //队列初始长度3 array ...原创 2019-05-26 03:06:44 · 130 阅读 · 0 评论 -
冒泡排序(第1版)
这个冒泡排序已经写了不知道多次了,所谓熟能生巧,这次还是继续写。。。temp不参与值大小比较,只是个中介而已,所以放哪里初始化都一样。package chapter4.part1;import java.util.Arrays;import org.junit.Test;public class BubbleSort { @Test public void testB...原创 2019-05-26 15:29:01 · 224 阅读 · 0 评论 -
冒泡排序(第2版)
优化内容:在大循环和小循环之间增加布尔变量isSort,来判断数组是否有序,如果有序,立即终止外层循环,之后的回合不必再继续下去,做无用功。package chapter4.part1;import java.util.Arrays;import org.junit.Test;public class BubbleSort2 { @Test public void te...原创 2019-05-26 17:59:40 · 141 阅读 · 0 评论 -
冒泡排序(第3版)
冒泡排序第1版冒泡排序第2版对于数列{3, 4, 2, 1, 5, 6, 7, 8},前半部分:{3, 4, 2, 1}无序,后半部分:{5, 6, 7, 8}有序,如果采用第二版的算法,依然不是最好的,因为第二版会把后半部分无用功地重新排序,这个问题的关键点在于对数列有序区的界定。而有序区的长度=排序的轮数。故设置多下方两个变量。int lastIndex = 0;//...原创 2019-05-26 20:07:09 · 220 阅读 · 0 评论 -
鸡尾酒排序(冒泡排序升级版)
参考:程序员小灰冒泡排序每次都是从左到右来比较元素,进行单向的位置交换。鸡尾酒排序的元素比较和交换过程都是双向的。package chapter4.part2;import java.util.Arrays;import org.junit.Test;public class Cocktail { @Test public void test() {/...原创 2019-05-27 00:16:35 · 555 阅读 · 1 评论 -
快速排序之双边循环法
参考:程序员小灰快速排序简称快排,快速排序的平均时间复杂度为O(n log n),比起时间复杂度O(n^n)如冒泡排序,省了非常多的运行时间,故称快速排序。快速排序的思路是分治法。此处将采用递归+while双边循环的方式 进行书写快排代码。@Test public void doubleLoopTest() { int[] array = new int[] {4, 4, ...原创 2019-05-28 15:10:38 · 744 阅读 · 0 评论 -
快速排序之单边循环法
原始来源:程序员小灰参考第1篇:快速排序之双边循环法使用mark指针来交换或存放小元素,最后作为基准元素的下标。使用递归+单边for+mark指针。 /* * 单边循环法 */ @Test public void sigleLoopTest() { int[] array = new int[] {4, 4, 6, 5, 3, 2, 8, 1};// int[...原创 2019-06-01 01:11:58 · 1393 阅读 · 0 评论 -
寻找全排列的下一个数
题目:给出一个正整数,找出这个整数所有数字全排列的下一个数。即在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数。举例:输入12345,则返回12354。输入12354,则返回12453。输入12435,则返回12453。题目来源:程序员小灰package chapter5.part8;import java.awt.Font;import jav...原创 2019-06-12 22:51:32 · 421 阅读 · 0 评论 -
计数排序第1版
package chapter4.part5;import java.util.Arrays;import org.junit.Test;public class CountSortTest { @Test public void TestCountSort() { int[] array = new int[] {4,4,6,5,3,2,8,1,7,5,6,0,10};...原创 2019-06-07 11:28:14 · 258 阅读 · 0 评论 -
计数排序第2版(优化)
参考:程序员小灰参考2:漫画:什么是计数排序?package chapter4.part5;import java.util.Arrays;import org.junit.Test;public class CountSortV2Test { @Test public void countSortV2Test() { int[] array = new int[...原创 2019-06-07 11:56:55 · 199 阅读 · 0 评论