算法训练
文章平均质量分 79
本专栏用于记录和分享力扣和牛客网上经典编程题目题解以及解题思路
Li_yizYa
持之以恒
展开
-
分享一个降低时间复杂度的方法~除自身以外数组的乘积
给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据 保证 数组nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在O(n) 时间复杂度内完成此题。原创 2023-03-03 13:27:24 · 331 阅读 · 0 评论 -
数据结构~七大排序算法(Java实现)
数据结构~七大排序算法~Java实现~直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、针对快速排序的优化、归并排序原创 2023-02-18 00:42:51 · 419 阅读 · 0 评论 -
LeetCode Hot 100~Day3
LeetCode Hot 100~原创 2022-12-26 23:00:37 · 581 阅读 · 0 评论 -
LeetCode Hot 100~Day2
leetcode Hot 100~原创 2022-12-23 23:05:34 · 1482 阅读 · 2 评论 -
LeetCode Hot 100~Day1
挑战十天完成leetcode hot 100~第一天原创 2022-12-12 01:06:28 · 431 阅读 · 0 评论 -
算法学习 | 回溯算法之深度优先搜索常见题型练习
深度优先搜索(Depth First Search):深度优先搜索属于图算法的一种,其过程主要是对每一个可能的分支路径深入到不能再深入到为止,而且每个节点只能访问一次。深度优先搜索本质上就是暴力搜索,遍历了所有可能的情况,必然能得到解。DFS搜索的流程是一个树的形式,每次一条路走到黑。原创 2022-11-27 22:22:22 · 1109 阅读 · 0 评论 -
算法学习 | 深度优先搜索~一条道走到黑
深度优先搜索(Depth First Search):深度优先搜索属于图算法的一种,其过程主要是对每一个可能的分支路径深入到不能再深入到为止,而且每个节点只能访问一次。深度优先搜索本质上就是暴力搜索,遍历了所有可能的情况,必然能得到解。DFS搜索的流程是一个树的形式,每次一条路走到黑。深度优先搜索的关键是解决“当下该如何做”,下一步的做法和当下的做法是一致的。“当下如何做”一般是尝试每一种可能,用for循环遍历对于每一种可能确定之后,继续走下一步,当前的剩余可能等到从下一步回退之后再处理。原创 2022-11-25 21:20:38 · 932 阅读 · 1 评论 -
买卖股票的最好时机(一、二)
买卖股票是经典的动态规划问题,在动态规划的学习与练习中,最重要的是定义状态并根据状态进行方程递推,分别以贪心思想和动态规划来解决买卖股票的最好时期一和二原创 2022-11-20 00:02:32 · 386 阅读 · 0 评论 -
算法学习 | 动态规划经典练习题合集
动态规划思想~带权值的最小路径和、背包问题(二)、分割回文串-ii、编辑距离原创 2022-10-28 23:33:18 · 2919 阅读 · 0 评论 -
算法学习 | 动态规划~大事化小、小事化了
动态规划算法思想总结以及相关OJ题练习记录:斐波那契数列、拆分词句、三角形、不同的路径数目(一)原创 2022-10-27 23:33:13 · 684 阅读 · 0 评论 -
算法学习 | 贪心算法~通过局部最优的选择来得到整体最优解
贪心算法思想总结以及贪心算法相关OJ题:选择排序、平衡字符串、买卖股票的最佳时机 II、跳跃游戏、最多可以参加的会议数目原创 2022-10-26 21:42:02 · 2439 阅读 · 1 评论 -
算法训练~替换空格、递归思想的应用(从尾到头打印链表、二叉树重建)
分享今日的算法学习:替换空格、从头到尾打印链表、重建二叉树,替换空格为字符串相关问题,主要要观察其特性并对其特性进行处理。从头到尾打印链表与重建二叉树都是利用递归的思想来解决的,对于递归的理解很有帮助,希望我的文章可以帮助到有需要的人...原创 2022-06-18 23:51:41 · 162 阅读 · 0 评论 -
Java~算法训练之数组篇
数组的应用篇,二维数组中的查找、旋转数组的最小数字、调整数组顺序使奇数位于偶数前面、数组中出现次数超过一半的数字。对于数组的问题,其考察点可能有数组的特性观察,对于时间复杂度的把握,数组与查找算法的结合,数组与排序算法的结合,数组的简单算法设计等...原创 2022-06-17 22:51:25 · 442 阅读 · 1 评论 -
分享一道力扣困难题~寻找两个有序数组的中位数(Java)
在我一开始看到这个题目的时候,首先想到的方法就是合并两个数组,边合并边排序,之后取中间的数字即可,这种写法是简单,可是时间复杂度是O(m+n),而题目的要求是O(log (m+n)),显然这种方法是行不通的。 从最大值开始依次比较插入新的数组,完成后取中间值即可.这种解法的时间复杂度为题目要求的O(log (m+n)),且空间复杂度为O(1),显然优于第一种思路。该种思路的主要思想为二分思想,每比较一次就缩小一次范围,具体思路如下所示:首先,整体分为两种情...原创 2022-06-09 22:01:55 · 1753 阅读 · 6 评论 -
分享两道最近做的比较经典的OJ题(排列子序列+字符串中找出连续最长的数字串)
目录排序子序列字符串中找出连续最长的数字串这两道编程题难度一般,但是一定得认真读题理解题意,在做第一道题“排序子序列”时,一直不理解非递增或非递减排序的意思,一直因为这个问题无从下手,最终了解到,非递减排序即arr[i] <= arr[i+1] ,非递增排序即arr[i] >= arr[i+1] ;做第二道题时,对于题意也理解错了,我理解的是不仅要是连续的数字串,还得是递增的,可能当时编程的时候想多了,也没有认真读题.排序子序列题目链接:排序子序列输入描述原创 2022-04-22 19:04:23 · 762 阅读 · 0 评论 -
二叉树经典练习题合集2(Java实现)
目录二叉树的最近公共祖先二叉搜索树与双向链表从前序和中序遍历序列构造二叉树根据二叉树创建字符串本篇所有的代码已更新至码云仓库中,代码仓库地址:我的代码仓库二叉树的最近公共祖先题目链接:二叉树的最近公共祖先题目描述:给定一棵二叉树,找到该树中两个指定结点的公共祖先.例如:解题思路:1.首先判断该树是否为空,若为空直接返回null2.判断给定的两个结点是否有为根结点的,若有,则直接返回根结点,根结点即这两个结点的公共祖先3.分别...原创 2022-03-31 23:26:34 · 1674 阅读 · 0 评论 -
Java~两种方案设计一个有getMin功能的栈
题目实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作.要求 1.pop、push、getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构.解题思路 在解决问题时,两种方案其实都是利用两个栈来实现,一个栈用来保存当前栈中的元素,其功能是一个正常的栈,将这个栈称为stackData;另一个栈用来保存每一步的最小值,这个栈称为stackMin。具体实现方式有两种.两种方案的其他方法均相同,只是压入数据和出栈的规则不同.目录初原创 2022-03-23 23:11:33 · 1085 阅读 · 4 评论 -
二叉树经典练习题合集(Java实现)
二叉树的问题大多是以递归思想求解,也可以利用迭代思想利用队列实现,熟练运用递归对于解决二叉树问题十分重要,本篇博客为一些基础的二叉树问题,对于理解二叉树的结构以及递归思想有着很大的帮助.本篇文章所有的代码已上传至gitee中:二叉树OJ练习目录树的重要概念总结相同的树另一颗树的子树二叉树的最大深度平衡二叉树对称二叉树迭代实现(利用队列实现)递归实现二叉树的层次遍历树的重要概念总结①结点的度:一个结点含有子树的个数称为该结点的度;②树...原创 2022-03-22 21:09:22 · 1869 阅读 · 2 评论 -
链表经典练习题合集2(Java版)
本篇主要为leetcode上链表部分中等及困难难度练习题,链表部分的习题画图十分重要,只要链表结构画出来,再写代码解决问题就容易很多。做完这些难度高的习题后发现,其实中等难度的习题只是将两个甚至三个以上的知识点融汇到一个题目中,当掌握链表的基本处理方法后,并用心去钻研,解决这些习题其实也不是想象中的那么难.本篇中的例题代码均已更新在gitee代码仓库中,仓库链接:gitee代码仓库希望我的解决思路可以给大家带来帮助,也希望大家可以指出我思路或者逻辑上的不足☺☺目录两数相加删除链表.原创 2022-03-18 23:25:34 · 1338 阅读 · 1 评论 -
链表经典练习题合集(Java版)
最近开始了数据结构的学习,数据结构是比较抽象的,需要不断的进行画图总结,不断地刷相关的题来加强自己对于数据结构的理解,我会不断地更新博客以及上传自己的做题记录以及题解,希望可以给大家带来帮助,也希望大家可以指出我存在的问题,共同进步☺这是我的gitee链接,所有的代码都已上传至gitee中:gitee代码仓库目录移除链表元素反转链表链表的中间结点链表中倒数第k个结点合并两个有序链表移除链表元素原题链接:203.移除链表元素题目描述:给你...原创 2022-03-15 17:53:28 · 2680 阅读 · 1 评论 -
杨辉三角(Java实现)顺序表的使用练习
解决思路 :使用顺序表解决杨辉三角的核心思想:定义出如下的顺序表,来记录最终的结果.List<List<Integer>> ret = new ArrayList<>();定义出如下的顺序表来记录每一行的结果List<Integer> list = new ArrayList<>();假设要实现一个高度为4的杨辉三角,则根据上述的定义,可以大概给出如下模型图根据杨辉三角的定义,每一行的第一个位置和最后一个位置都...原创 2022-03-15 13:46:30 · 665 阅读 · 3 评论 -
Java~String类OJ练习(字符串中的第一个唯一字符、验证回文串)
目录LeetCode—No.387—字符串中的第一个唯一字符LeetCode—No.125—验证回文串LeetCode—No.387—字符串中的第一个唯一字符题目链接:字符串中的第一个唯一字符题目描述给定一个字符串s,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回1.示例1:输入:s = "leetcode"返回:0示例2:输入:s = "loveleetcode"返回:2解题思路创建一个长度为26的数组,以每个字母作为数组的下原创 2022-03-02 23:05:13 · 289 阅读 · 0 评论 -
Java~编程实现图书管理系统小项目(管理员操作界面、借阅者操作界面)
Java实现图书管理系统,该项目的完成有助于我整合并强化前期的学习,充分利用Java面向对象的编程思想来实现该项目,进一步加深对于:类、对象、抽象类、接口、封装、继承、多态的理解.原创 2022-02-27 00:16:29 · 2728 阅读 · 2 评论 -
Java基础练习~利用类的实例化、构造方法重载实现一个自己的小车库
利用类的实例化做了一个简单的小车库,创建了三个类:汽车类(其中的属性有:车辆名称、车牌号、停车状态、车的价格)、车库类(利用组合的思想来记录汽车信息,其中属性有车库内现有的汽车数量)、主函数Main类.类中包括:每个类中大概私有属性、类的方法、构造方法等.实例化实现代码:MyCar.javapublic class MyCar { private String carName; private String numberOfCar; private String..原创 2022-02-26 01:17:49 · 465 阅读 · 1 评论 -
Java实现选择题or判断题自动批改功能
题目:某某学校需要快速完成对于考试试卷的批改,因此需要设计出一个自动批改题目功能,以此来提升阅卷速度,每份试卷上有n道选择题/判断题,现在需要实现一个功能来完成对题目的批改,并进行打分。功能要求:1.学生人数、题数、标准答案均由用户提出;2.标准答案和学生答案为String类型;3.输出每个学生的得分;4.输出得分最高的学生,输出该学生的答案、分数。...原创 2022-02-24 12:42:25 · 2665 阅读 · 2 评论 -
Java~递归实现汉诺塔、青蛙跳台问题
目录汉诺塔问题描述解题思路代码实现青蛙跳台问题描述解题思路代码实现汉诺塔问题描述汉诺塔(Towe of Hanoi),又称为河内塔,是一个源于印度古老传说的益智玩具。大梵天在创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序放着64片黄金的圆盘。大梵天命令婆罗门把圆盘从下面开始按照大小顺序1重新摆放在另一根柱子上。并且规定在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。问题解析1.三根圆柱A、B、C,其中A上串了..原创 2022-02-23 00:15:27 · 511 阅读 · 3 评论