JAVA算法
文章平均质量分 67
隔壁皮皮王
这个作者很懒,什么都没留下…
展开
-
算法练习——0-1背包问题(回溯法)
0-1背包问题(回溯法)目录0-1背包问题(回溯法)题目:示例:分析:回溯法(探索与回溯法)题目解析:代码:题目:给定n个重量为w1,w2,w3,…,wn,价值为v1,v2,v3,…,vn的物品和容量为C的背包求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价值最大注意:0-1背包问题指的是每个物品只能使用一次示例:示例:输入: int[] weight = {2,5,3,4}; int[] value = {10,7,4,6}; int c = 10原创 2021-08-23 01:04:08 · 3296 阅读 · 0 评论 -
最大子数组和(连续子数组的最大和)—— 提高篇
最大子数组和此题解法仅为为个人理解,如有其他思路或解法欢迎来探讨!基础篇链接:最大子数组和(连续子数组的最大和)—— 基础篇目录最大子数组和题目:示例:分析:代码:题目:已知一个整数数组 arr,找到子数组的最大和(子数组最少包含一个元素)并返回这个子数组。子数组元素顺序不发生改变且需连续。示例:输入: arr = [-2,1,-3,4,-1,2,1,-5,4]输出: sum = 6 ,nums = [4,-1,2,1] 分析:这道题打眼一看就是一道考察动态规划的题(当原创 2021-08-15 21:52:55 · 2136 阅读 · 0 评论 -
最大子数组和(连续子数组的最大和)—— 基础篇
最大子数组和(动态规划、分治法):此题解法仅为为个人理解,如有其他思路或解法欢迎来探讨!力扣链接:连续子数组的最大和目录最大子数组和(动态规划、分治法):题目:示例:分析:代码:动态规划:分治法(具体讲解提高篇有):我自己的另一种写法:题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。示例:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分析:原创 2021-08-11 20:01:15 · 5265 阅读 · 2 评论 -
算法练习——实现二叉树前序、中序和后序遍历
实现二叉树前序、中序和后序遍历:目录实现二叉树前序、中序和后序遍历:题目:示例:分析:代码:题目:实现二叉树前序、中序和后序遍历提示:使用递归实现示例:示例:输入:/* 1 2 3 4 5 6*/前序输出:1 2 4 3 5 6中序输出:4 2 1 5 3 6后序输出:4 2 5 6 3 1分析:这道题其实不完全算是算法,其实就是二叉树的三种遍历方法:前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再原创 2021-08-08 20:25:35 · 426 阅读 · 0 评论 -
在练习了十七道算法题后的一些小结
算法小结 从被要求每天做一道算法题以来,已经做了十七道不同难度的算法题了,涉及到树、链表、栈 等数据结构的知识,也使用过动态规划、递归算法、贪心算法等常用解题思路。在做过了这些题后,也发现了自己的不足与知识的欠缺,同时也总结下来了一些小小的解题思路,在这里记录一下:快速导航目录算法小结认清自己的实力优先分析题目分析简化操作与排错打好数据结构的基础多找点经典算法题来做认清自己的实力这点非常重要!!“Rome was not built in a day” 谁都是从菜鸟一步一步过来的,不要急于求原创 2021-08-06 21:50:09 · 308 阅读 · 0 评论 -
算法练习 —— Z-字型变换
Z-字型变换:此题解法仅为为个人理解,如有其他思路或解法欢迎来探讨!力扣链接:Z 字形变换目录Z-字型变换:题目:示例:分析:代码:题目:将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行 Z 字形排列 。比如输入字符串为"PAYPALISHIRING" 行数为3时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将原创 2021-07-25 18:36:07 · 370 阅读 · 0 评论 -
数据结构的高级排序算法——希尔排序算法
高级排序希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。需求: 排序前:{9,1,2,5,7,4,8,6,3,5}排序原理:选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组。对分好组的每一组数据完成插入排序。减小增长量,最小减为1,重复第二步操作。图解:动图:由于希尔排序的设定,我们需要先确定增长量h:增长量h的值每一固定的规则,我们这里采用以下规则:int h=1;while(h<数组的长度/2){原创 2021-06-28 09:43:43 · 317 阅读 · 1 评论 -
排序算法基础——Comparable接口
Comparable接口java提供了一个Comparable接口用来定义比较规则,可实现对象间的比较。Comparable接口可以让实体类的两个实例依据类中某一字段的值进行比较或者排序。需求:对两个Student类对象的年龄age进行比较,获取年龄较大的Student对象。1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则:public class Student implements Comparable<Stud原创 2021-06-06 13:23:22 · 409 阅读 · 3 评论 -
排序算法时间复杂度测试——事后估算法
事后估算法reverse_arr.txt文本文件中存有10000~1的逆序数列,对于排序算法来说,逆序的数组是最复杂的,这里可用来测试算法的执行效率。这个文本文件可以使用IO流循环输出得到这个文件,大概例子之前IO部分有写到,这里就不再赘述。事后估算法的主要逻辑就是让算法执行预定好的逆序数组,在算法开始之前读取现在的系统时间,在算法执行结束后再次读取系统时间并求差值,便得到了算法执行所需要的时间。注:由于每个人电脑硬件的不同与系统执行效率的不同,所以导致相同算法在不同电脑上的运行速度是不一样的,但原创 2021-05-30 15:09:18 · 747 阅读 · 1 评论 -
数据结构的简单排序算法——插入排序算法
简单排序插入排序插入排序(Insertion sort)是一种简单直观且稳定的排序算法。需求:将数组排序排序前:{9,7,8,2,5,1,3,6,4}排序原理:把所有的元索分为两组,已经排序的和未排序的。找到未排序的组中的第一个元索,向已经排序的组中进行插入。倒叙遍历已经排序的元素,依次和待插入的元索进行比较,直到找到一个元索小于等于待插入元索,那么就把待插入元索放到这个位置,其他的元素向后移动一位。插入排序API设计:类名Insertion构造方法In原创 2021-05-21 09:41:34 · 300 阅读 · 4 评论 -
数据结构的简单排序算法——选择排序算法
简单排序选择排序选择排序是一种更加简单直观的排序方法。需求: 将数组排序 排序前:{9,5,6,8,2,7,3,4,1}排序原理:每一次遍历的过程中,都假定第一个索引处的元素是最小(大)值,和其他索引处的值依次进行比较,如果当前索引处的值大(小)于其他某个索引处的值,则假定其他某个索引出的值为最小(大)值,最后可以找到最小(大)值所在的索引。交换第一个(最后一个)索引处和最小(大)值所在的索引处的值。选择排序API设计:类名Selection构造方法原创 2021-05-21 09:14:08 · 310 阅读 · 2 评论 -
数据结构的简单排序算法——冒泡排序算法
简单排序冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较为简单的排序算法。需求:将数组排序 排序前:{9,5,6,8,2,7,3,4,1}排序原理:比较相邻元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。对每一对相邻元素做同样的工作,从第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。冒泡排序API设计:类名Bubble构造方法Bubble():创建Bubble对象成员方法1. public static原创 2021-05-17 09:59:03 · 440 阅读 · 2 评论