
算法
算法
hygge999
这个作者很懒,什么都没留下…
展开
-
背包问题——动态规划——Java实现
背包问题动态规划实现public class Knapsack { public static void main(String[] args) { int n = 5; int c = 10; int[] w = new int[]{2, 2, 6, 5, 4}; int[] v = new int[]{6, 3, 5, 4, 6}; Knapsack knapsack = new Knapsack();原创 2021-12-28 13:44:13 · 376 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort),是一种最基础的交换排序。算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;窗口右边界左移一位,重复步骤1~2,直到排序完成。代码实现static void BubbleSort(int[] arr) { for (int i = arr.length - 1 ; i > 0; i--){原创 2021-02-18 17:11:17 · 97 阅读 · 0 评论 -
算法初学之枚举算法
什么是枚举,百科上的解释:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。简单的理解,枚举就是逐个尝试答案的一种问...原创 2020-04-17 16:24:01 · 1867 阅读 · 0 评论 -
LeetCode 1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络所有原创 2020-09-27 19:32:55 · 127 阅读 · 0 评论 -
选择排序
选择排序是一种最简单但也最没用(时间复杂度高且不稳定)的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。也有优化的空间。算法描述在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。代码实现static void Select原创 2021-02-18 16:49:04 · 138 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。来源:力扣(Le原创 2020-10-11 12:09:43 · 128 阅读 · 0 评论 -
LeetCode 2. 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://leetcode原创 2020-10-11 11:15:51 · 111 阅读 · 0 评论 -
插入排序
算法描述从第一个元素开始,取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤2,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2~4。代码实现static void InsertionSort(int[] arr) { for (int i = 1 ; i < arr.length; i++){ for (int j = i; j > .原创 2021-02-18 18:13:21 · 83 阅读 · 0 评论 -
希尔排序
希尔排序的名称来源于它的发明者(Donald Shell),它是基于插入排序改进而成的的一种快速的算法,又称“缩小增量排序”。算法描述把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。代码实现static void SheelSort(int[] arr) { int h = 1; while (h <= arr.length / 3) {原创 2021-02-20 16:23:23 · 93 阅读 · 0 评论 -
LeetCode 1111.有效括号的镶嵌深度
题目转自LeetCode本人作为算法初学者,来记录对LeetCode题目的思考。其思想主要参照官方解法和网友的方法。题目叙述有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有效括号字符串类...原创 2020-04-18 09:55:33 · 1287 阅读 · 0 评论 -
算法目录及检验
记录个人学习算法的过程。算法检验class DataChecker { static int[] generateRandomArray() { Random r = new Random(); int[] arr = new int[10000]; for (int i = 0; i < arr.length; i++) arr[i] = r.nextInt(10000); return arr原创 2021-02-20 16:31:43 · 105 阅读 · 0 评论 -
算法初学之递归算法
递归算法简单的讲就是:一个函数调用其本身。他是通过重复将问题分解为同类的子问题而解决问题的方法。递归与普通的调用没有本质的差别,都是一个函数调用一个函数,只不过这个函数是他本身。函数调用都是通过栈来实现的。每一个应用程序运行时都有一定的内存属于他。栈是专门用来函数调用的,就是你这个函数调用了,栈就会向上伸展一层。伸展这一层存放的就是这次函数调用的形参,局部变量以及返回地址。当函数调用结束时,栈...原创 2020-04-17 16:15:20 · 1140 阅读 · 0 评论