算法
yud1
这个作者很懒,什么都没留下…
展开
-
动态规划
简介动态规划(Dynamic Programming)也叫DP算法,通常用于求解具有某种最优性质的问题。其基本思想就是将一个复杂的问题分解若干个简单的子问题,而这些子问题相互之间不是独立的,每个子问题仅仅只解决一次。我们可以使用一块额外的空间(例如数组)来记录所有已解的子问题的答案,不管这个子问题以后是否会被用到,都会记录到这个空间中。基本步骤首先我们来说明以下几个概念,状态:状态可以理解为原问题和简单的子问题的解。这时,我们需要根据子问题的状态的推导出原问题的状态,也就是推导出状态转移方程。状原创 2020-06-20 14:19:23 · 147 阅读 · 0 评论 -
Leetcode-反转链表
题目介绍给我们一个链表,将这个链表的反转过来。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题解模板/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }原创 2020-06-20 13:14:44 · 201 阅读 · 0 评论 -
java实现二分查找
二分查找的简单用法1,二分查找的思想二分查找是一种高效的查找算法。它比顺序查找快的多,虽然它需要的条件是数组是有序的。 在查找时,我们先将被查找的数和数组的中间键比较,因为数组是有序的,所有若被查找的数小于数组的中间键则这个数只可能在数组的左部分,然后将中间键的左边数组当作一个数组来进行二分查找。反之,则在数组的右部分,同样将右部分的数组当作一个数组来进行二分查找。若相等,则命中。2,二分查找的两原创 2017-12-25 17:01:18 · 3283 阅读 · 2 评论 -
栈,队列,背包(java实现)
栈栈是一种基于后进先出(LIFO)策略的数据结构。无论是在现实生活中,还是计算机中都大量运用了栈这个数据结构。例如:在浏览网页时,点击超链接会访问一个新的页面(压入栈中),你可以不断的点击新的超链接来访问新的页面。但是你总是可以点击回退按钮去访问以前访问的页面(从栈中弹出)。即程序添加元素的顺序和程序使用foreach遍历栈的顺序相反。栈有两种实现方法,一种是数组实现,一种是链表实现。下面我会一一详原创 2017-12-30 14:38:06 · 419 阅读 · 1 评论 -
希尔排序
基本介绍对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能从数组的一端移动到另一端。希尔排序是基于插入排序的高级排序算法。它将插入排序算法进行了改进,交换不相邻的元素以对数组局部进行排序,并最终用插入排序将局部有序的数组进行排序。基本思想将数组中任意间隔为h的元素都是有序的。这样的数组成为h有序数组。在排序时,如果h很大,我们可以将元素移动到很远的位置上。h是一...原创 2018-09-04 10:00:01 · 139 阅读 · 0 评论