![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
Luolimasi
这个作者很懒,什么都没留下…
展开
-
均匀生成随机数+拒绝取样
均匀生成随机数在产生随机数的基础上进行整数平移,各个数的产生概率不变。但倘若将产生随机数的rand_N两两相加借此来获得更大范围的随机数,那么不同数字产生的概率不同。已知 rand_N() 可以等概率的生成[1, N]范围的随机数那么:(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数即实现了 rand_XY()拒绝取样拒绝取样是在等概率产生随机数的基础上进行的。对于满足条件的数字取用,反之则舍弃。最后用数字相除所得到原创 2021-09-05 20:00:11 · 207 阅读 · 0 评论 -
二分法(Bisection method)
二分法含义:通过不断缩小区间。最终让结果成为这个区间内唯一的值。优势:我们可以通过二分法将一个选择问题变为判断问题。每次判断mid的值是否符合题目要求。适用条件:二分法不一定只是适用于有序的数据,关键在于:我们每次能否都能通过mid的值来不断缩小给定的区间。分类二分法可以分为整数型二分以及浮点型二分整数型二分整数二分相较于浮点型二分比较复杂,有时需要考虑特定的边界条件。可以参考二分法模板int l = 0, r = n;//n为初始时区间右端点,while (l < r) {//l原创 2021-08-21 17:37:01 · 1361 阅读 · 1 评论 -
图的搜索类题目
这个题解法好像挺多的 在这做个整理。机器人的运动范围深度优先遍历(DFS)class Solution { public int movingCount(int key, int rows, int cols) { Boolean[][] visited=new Boolean[rows][cols]; for(int i=0;i<visited.length;i++){ for(int j=0;j<visited[i原创 2021-08-18 00:06:26 · 171 阅读 · 0 评论 -
贪心算法总结
从问题的某一初始解出发: while (朝给定总目标前进一步){利用可行的决策,求出可行解的一个解元素。}由所有解元素组合成问题的一个可行解;原创 2021-08-17 21:35:10 · 148 阅读 · 0 评论 -
前缀和算法
前缀和算法含义:前缀和实际上就是对于长度为n的数组,我们新建立一个数组长度为n+1,第i个元素的值为前i个元素的和(包括第i个元素)。特点:1、前缀和数组比原数组多一个长度。2、前缀和的第0个元素的值为0。3、根据前缀和数组的特点,求前缀和时。我们只需要用第i个元素的值+第i-1个前缀个数组的值就可能得到第i个前缀和数组的值。(这也是一种动态规划的思想)。应用:前缀和算法可以解决一些在数组中与连续有关的问题。题目第一题和为K的子数组代码class Solution { public i原创 2021-08-16 02:08:20 · 317 阅读 · 0 评论 -
不同类型的动态规划问题简单区分
目前,就动态规划已经与到了很多类型的题目但现在最难理解的还是一下两个问题。零钱兑换2 这个问题就是让我们求满足所给整数的零钱组合。爬楼梯 但这个问题需要稍微做一下变式,我们能爬的阶数不仅仅局限于1和2了。给定我们一个非空数组,数组内的所有数字都是我们能够直接爬的阶数。。求能爬上顶点的方案这两个问题显然都能利用动态规划的思想去解决。其代码完成后的差别也仅在内外循环的先后顺序循环顺序的改变影响的是动态数组更新方式的不同。第一题代码class Solution { public int原创 2021-08-14 23:49:36 · 162 阅读 · 0 评论 -
三种有序查找方式
二分查找package 查找;public class Binarysearch { public static void main(String[] args) { int[] a=new int[]{2,5,6,8,67,58,46}; System.out.println(Binarysearch.search(a,58)); } public static int search(int a[],int key) { int low=0; int high=a.length原创 2021-08-09 21:26:13 · 423 阅读 · 0 评论 -
java创建邻接表
邻接表 主要适用于 点较多而边较少的情况。可以减少占用空间package 图;import java.util.Scanner;public class AdjacencyList {//实现 邻接表 static class Node{ char data;//结点数据 int index;//邻接点 在数组中的坐标 Node next;//指针 int weight;//存储 两个点之间 边的权值 边表中才用得到 } int vexnum,edgenum;//边数和原创 2021-08-04 18:43:24 · 2198 阅读 · 1 评论 -
java创建邻接矩阵
遍历后面再加 ,目前先写下创建。package 图;import java.util.Scanner;public class Graph {//无向图 int edgenum,vexnum;//边数和点数 char[] vexs;//顶点表 int[][] arc;//邻接矩阵 public Graph(int vex,int edgenum) { this.vexs=new char[vex]; this.arc=new int[vex][vex]; } public v原创 2021-08-04 18:27:23 · 742 阅读 · 0 评论 -
链表算法之快慢指针判断链表中是否存在环
龟兔赛跑算法通过在链表中直指定两个指针,一个每次移动两格,一个每次移动一格。判断两个指针在多次循环后是否相等来判断链表中是否存在环结构。这个算法很好理解,一快一慢。//初始化 fast=head.next; slow=head; while(slow!=fast){ if(fast==null || fast.next=null){ return true; } slow=slow.next; fast=fast.next原创 2021-08-01 22:46:48 · 294 阅读 · 0 评论 -
DP动态规划
动态规划的基本性质:1:问题具有最优子结构性质:问题所包含的子问题的解也是最有的。2:无后效性:算一步是一步,只会存储当前的运算结果。为下一步计算提供结果。动态规划的解题思路核心:写出递归问题的转移方程并确定转移方程的边界条件。爬楼梯问题分析:对于爬上n阶楼梯的方法数,实际上就是爬上n-1阶和n-2阶方法数的总和(n-1再爬一阶就能到n,n-2再爬2阶就能到n)。对于边界条件就是爬1阶的方法数和爬2阶的方法数,然后根据转移方程不断推进,就可以得到答案。但动态规划问题并不都是这么直接,很多问题的原创 2021-07-31 13:59:35 · 533 阅读 · 0 评论 -
数据结构队列的链式结构功能及实现
package 队列链式存储结构及功能实现;public class LinkedQueue { static class LinkedNode{ int data; LinkedNode next; public LinkedNode(int data) { this.data=data; } } LinkedNode front,rear; int size; public LinkedQueue() { front=null; rear=null; si原创 2021-07-30 17:31:35 · 78 阅读 · 0 评论 -
数据结构栈的链式结构代码及其部分功能实现
package 栈链式结构及功能实现;/*有了size 就能遍历整个链栈了。 * * */public class LinkedStack { static class LinkedNode{ int data; LinkedNode next; public LinkedNode(int data) { this.data=data; } } LinkedNode top;//指向栈顶,链栈的第一个节点 int size;//链栈长度 public Link原创 2021-07-29 17:42:05 · 94 阅读 · 0 评论 -
数据结构栈的顺序结构代码及其部分功能实现
package 栈顺序结构及功能实现;/*删除 插入只能在栈顶操作,需要个指针,每次操作检查下是不是空栈,然看再看看栈满没满*/public class Stack { int top;//栈顶指针 int[] stack=new int[50]; public Stack(){ top=-1;//初始化栈顶指针 } //进栈 public void push(int data){ if(top>=stack.length-1) { return ; } e原创 2021-07-29 16:36:05 · 89 阅读 · 0 评论 -
数据结构线性表之双向循环链表结构代码及其部分功能实现
package 线性表双向循环链表结构及其功能实现;/*优化了下 插入方法,选择的应该是第几个空位插入,双向循环链表,能够正逆两个方向显示数据*******/public class DoubleCircularLinkedList {class ListNode {int data;ListNode prev;//指向前驱ListNode next;//指向后继public ListNode(int data) {this.data = data;}} ListNode原创 2021-07-28 23:12:28 · 110 阅读 · 0 评论 -
数据结构线性表之循环链表结构代码及其部分功能实现
package 线性表循环链表结构及功能实现;/*链表基本功能已经实现,基本上基于单链表来实现的。循环链表的特殊性,让它在遍历时最后一个数据必须单独 * 显示。 * 既然方法名字叫做插入,那肯定是在两个数字之间,那头尾指针都不会因为插入操作而改变, * 所以链表的循环不会发生错误。 * 删除那里考虑的要全面一点。 * 其他的基本上就是单链表的内容了 * * * * * */public class CircularLinkedList { class ListNode原创 2021-07-28 20:31:16 · 104 阅读 · 0 评论 -
数据结构线性表之链式结构代码及其部分功能实现
单链表代码package 线性表单链表结构及功能实现;/*程序最大的好处 在于从链表类中创建了一个结点内部类,创建嵌套类的对象 不需要对象名 直接使用.next * * 程序仍可改进点:程序虽然存在头指针了,但我们仍可以申请一个空节点始终作为程序的第一个节点,这样能够 * 使得程序在插入 与 删除等操作时 第一节点 与其他节点操作保持一致。减少代码量。 * * */public class LinkedList {//补充链表更新数值的功能 static class ListNod原创 2021-07-27 19:19:13 · 125 阅读 · 0 评论 -
数据结构之线性表顺序结构及功能实现
代码实现package 线性表顺序结构及功能实现;import java.util.Scanner;public class List { public static void main(String args[]) { int[] a=new int[20];//数组长度 int length=10;//线性表长度(数据个数) Scanner sc=new Scanner(System.in); for(int i=0;i<length;i++) { System.out原创 2021-07-27 16:09:42 · 95 阅读 · 0 评论 -
三种排序方法
直接插入排序package 三种排序方法;public class 直接插入排序 { public static void main(String args[]) { int array[]= {7,8,45,231,234,23,98,11}; int temp; int j; for(int i=0;i<array.length-1;i++) { temp=array[i]; j=i-1; while(j>=0&&array[j]<temp)原创 2021-05-21 16:58:51 · 152 阅读 · 0 评论 -
java常见数组
public class 不等长数组 { public static void main(String args[]){ int a[][]=new int[9][]; int i; for(i=0;i<a.length;i++) a[i]=new int[i+1]; for(i=0;i<a.length;i++) { for(int j=0;j<a[i].length;j++) { System.out.print((i+1)*(j+1)+" "); }原创 2021-03-23 12:15:07 · 115 阅读 · 0 评论