
java算法
布鲁克泰勒
无论何时都能通过看海贼AB站而元气满满的某汪一只 ( •̀ .̫ •́ )✧
展开
-
java排序之选择排序(二)
选择排序(升序),外层循环从第一个数开始,选择与后面的每个数相比,若小,则交换位置。外层第一次循环选出最小的数。。然后依次循环,直到排序完成。//第一种写法,(个人感觉这种写法更好)static int[] selectSort(int[] p){ int i, j, temp, index; for(i=0; i<p.length-1; i++){原创 2015-04-05 22:50:08 · 461 阅读 · 0 评论 -
算法编程题随记
1.全排列有递归回溯法, dfs遍历字典序排列:https://www.jianshu.com/p/e0de4c9b73f2原创 2019-02-25 13:51:39 · 193 阅读 · 0 评论 -
链表中环的入口结点
方法一:/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode EntryNodeOfLoop(ListNode pHea原创 2018-04-10 15:56:48 · 139 阅读 · 0 评论 -
蓄水池采样算法
算法过程:假设数据序列的规模为 n,需要采样的数量的为 k。首先构建一个可容纳 k 个元素的数组,将序列的前 k 个元素放入数组中。然后从第 k+1 个元素开始,以 k/n 的概率来决定该元素是否被替换到数组中(数组中的元素被替换的概率是相同的)。 当遍历完所有元素之后,数组中剩下的元素即为所需采取的样本。public class ReservoirSamplingTest { private原创 2018-04-10 10:30:37 · 347 阅读 · 0 评论 -
滑动窗口最大值(队列O(1)得到最大值)
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, ...原创 2018-03-30 21:38:56 · 397 阅读 · 0 评论 -
序列动态规划问题
1、最长公共字串#include <iostream>#include <cstring>#define MAX_LEN 100using namespace std;void max_substr(char *s1, char *s2){ int len1 = strlen(s1), len2 = strlen(s2); int r...原创 2018-03-14 00:41:57 · 207 阅读 · 0 评论 -
01背包问题
背包问题#include <cstdio>/*v:物品的体积w:物品的价值n:物品的个数max_v:背包的最大体积*/void bag_1(int *v, int *w, int n, int max_v){ int f[n+1][max_v+1]; int i,j; for(i=0;i<=max_v; ++i) ...原创 2018-03-13 22:13:07 · 162 阅读 · 0 评论 -
八皇后问题,Java实现,可推广解决N皇后问题
八皇后问题是一个经典的回溯算法的问题。 八皇后问题说的是:国际象棋棋盘有8行8列,即8*8=64个单元格,现在在棋盘上排放八个皇后,使其不能互相攻击,就是说任意两个皇后都不能处于同行同列,或同一斜线上。问有多少钟摆法,摆放的方式为?N=8,(N>=4); 算法思路:棋盘可用二维数组构成,因为任意皇后不在同行,我们用一个一维数组position[N],来保存每一行皇后的位置,就可避免在原创 2015-04-06 14:35:51 · 1175 阅读 · 0 评论 -
马踏棋盘java算法完整版
马踏棋盘很好实现,但有时运行起来特别慢,还可能出不来结果,在这里要用到贪心算法来优化。关于贪心算法具体可以自行去翻阅资料。简单点说,它能局部最优:它是当前步骤中所有可行选择中最佳的局部选择。如果贪心算法正确工作,**那么找到的第一个解通常是最优的。**可惜贪心算法需要证明后才能真正运用到题目的算法中。下面给出该算法完整代码:package classic_arithmetic;import ja原创 2015-04-05 21:53:57 · 5460 阅读 · 2 评论 -
java排序之shell排序(希尔排序)(四)
shell排序是一种相对我之前写的冒泡,选择,插入排序更加高效的排序算法;它的基层排序思想还是用的插入排序的思想,但加入了缩小增量的思想;流程如下:1、将n个元素的数组分成n/2个序列,第1个数据与第n/2+1个数据为一对,第2个数据与第n/2+2个数据为一对....2、一次循环使每一个序列对排好序。3、然后再分为n/4个序列,第一个数据与第n/4+1个数据为一对...再次排序4、不断重复原创 2015-04-06 13:43:55 · 607 阅读 · 0 评论 -
java排序之快速排序(五)
快速排序和冒泡排序都是基于交换思想的。但快速排序相比之前排序具有更高的效率。快速排序用到了递归的方式,分治的思想。具体流程如下:1、首先设定一个分界值(一般设定低位或者中位为分界值),通过该分界值将数据分成左右两部分。2、将小于或等于分界值的数分到左边部分,大于分界值的数分到右边部分。3、然后左右两部分的数据可以独立排序,左边数据中又取一个分界值,分为两部分,跟2步骤中一样。右边数据同样如此原创 2015-04-06 14:10:43 · 601 阅读 · 0 评论 -
java排序之插入排序(三)
当一组数据中有一部分数据已经是排好时,用插入排序更好。插入排序的原理是,升序时,从第二个数开始循环跟前面的数一一作比较,如果小于前面的数就插入这个数的前面的一个位置。具体看代码。。//第一种写法static int[] insertSort(int[] p){ int j, temp; for(int i=1; i<p.length; i++){ temp =原创 2015-04-06 13:21:58 · 452 阅读 · 0 评论 -
java排序之冒泡排序(一)
看了排序许久,准备把近段时间的心得都写下来,一个排序的系列,从最容易理解的冒泡排序开始。冒泡排序,外层循环控制循环的次数,里层循环就是从第一个数开始,相邻两个数之间作比较,大的往后排,像冒泡一样。一个一个的往后排。static int[] bubbleSort(int[] p){ int j, temp; for(int i=1; i原创 2015-04-05 22:40:56 · 483 阅读 · 0 评论