自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 均匀生成随机数+拒绝取样

均匀生成随机数在产生随机数的基础上进行整数平移,各个数的产生概率不变。但倘若将产生随机数的rand_N两两相加借此来获得更大范围的随机数,那么不同数字产生的概率不同。已知 rand_N() 可以等概率的生成[1, N]范围的随机数那么:(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数即实现了 rand_XY()拒绝取样拒绝取样是在等概率产生随机数的基础上进行的。对于满足条件的数字取用,反之则舍弃。最后用数字相除所得到

2021-09-05 20:00:11 203

原创 二分法(Bisection method)

二分法含义:通过不断缩小区间。最终让结果成为这个区间内唯一的值。优势:我们可以通过二分法将一个选择问题变为判断问题。每次判断mid的值是否符合题目要求。适用条件:二分法不一定只是适用于有序的数据,关键在于:我们每次能否都能通过mid的值来不断缩小给定的区间。分类二分法可以分为整数型二分以及浮点型二分整数型二分整数二分相较于浮点型二分比较复杂,有时需要考虑特定的边界条件。可以参考二分法模板int l = 0, r = n;//n为初始时区间右端点,while (l < r) {//l

2021-08-21 17:37:01 1337 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 166

原创 贪心算法总结

从问题的某一初始解出发: while (朝给定总目标前进一步){利用可行的决策,求出可行解的一个解元素。}由所有解元素组合成问题的一个可行解;

2021-08-17 21:35:10 145

原创 前缀和算法

前缀和算法含义:前缀和实际上就是对于长度为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 310

原创 不同类型的动态规划问题简单区分

目前,就动态规划已经与到了很多类型的题目但现在最难理解的还是一下两个问题。零钱兑换2 这个问题就是让我们求满足所给整数的零钱组合。爬楼梯 但这个问题需要稍微做一下变式,我们能爬的阶数不仅仅局限于1和2了。给定我们一个非空数组,数组内的所有数字都是我们能够直接爬的阶数。。求能爬上顶点的方案这两个问题显然都能利用动态规划的思想去解决。其代码完成后的差别也仅在内外循环的先后顺序循环顺序的改变影响的是动态数组更新方式的不同。第一题代码class Solution { public int

2021-08-14 23:49:36 156

原创 三种有序查找方式

二分查找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 416

原创 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 2187 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 740

原创 链表算法之快慢指针判断链表中是否存在环

龟兔赛跑算法通过在链表中直指定两个指针,一个每次移动两格,一个每次移动一格。判断两个指针在多次循环后是否相等来判断链表中是否存在环结构。这个算法很好理解,一快一慢。//初始化 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 291

原创 DP动态规划

动态规划的基本性质:1:问题具有最优子结构性质:问题所包含的子问题的解也是最有的。2:无后效性:算一步是一步,只会存储当前的运算结果。为下一步计算提供结果。动态规划的解题思路核心:写出递归问题的转移方程并确定转移方程的边界条件。爬楼梯问题分析:对于爬上n阶楼梯的方法数,实际上就是爬上n-1阶和n-2阶方法数的总和(n-1再爬一阶就能到n,n-2再爬2阶就能到n)。对于边界条件就是爬1阶的方法数和爬2阶的方法数,然后根据转移方程不断推进,就可以得到答案。但动态规划问题并不都是这么直接,很多问题的

2021-07-31 13:59:35 529

原创 数据结构队列的链式结构功能及实现

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 75

原创 数据结构栈的链式结构代码及其部分功能实现

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 91

原创 数据结构栈的顺序结构代码及其部分功能实现

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 87

原创 数据结构线性表之双向循环链表结构代码及其部分功能实现

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 107

原创 数据结构线性表之循环链表结构代码及其部分功能实现

package 线性表循环链表结构及功能实现;/*链表基本功能已经实现,基本上基于单链表来实现的。循环链表的特殊性,让它在遍历时最后一个数据必须单独 * 显示。 * 既然方法名字叫做插入,那肯定是在两个数字之间,那头尾指针都不会因为插入操作而改变, * 所以链表的循环不会发生错误。 * 删除那里考虑的要全面一点。 * 其他的基本上就是单链表的内容了 * * * * * */public class CircularLinkedList { class ListNode

2021-07-28 20:31:16 101

原创 数据结构线性表之链式结构代码及其部分功能实现

单链表代码package 线性表单链表结构及功能实现;/*程序最大的好处 在于从链表类中创建了一个结点内部类,创建嵌套类的对象 不需要对象名 直接使用.next * * 程序仍可改进点:程序虽然存在头指针了,但我们仍可以申请一个空节点始终作为程序的第一个节点,这样能够 * 使得程序在插入 与 删除等操作时 第一节点 与其他节点操作保持一致。减少代码量。 * * */public class LinkedList {//补充链表更新数值的功能 static class ListNod

2021-07-27 19:19:13 122

原创 数据结构之线性表顺序结构及功能实现

代码实现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 93

原创 三种排序方法

直接插入排序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 149

原创 将一个正整数分解质因数。

**将一个正整数分解质因数。例如:输入90,打印出90=233*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。import java.util.Scanner;public class MainDemo

2021-04-14 16:30:42 277

原创 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少import java.util.Scanner;public class MainDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入月份"); int Inputmonth = sc.

2021-04-14 15:59:33 99

原创 求分数序列前N项和

要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。import java.util.Scanner;public class Test { public static void main(String args[]) { double n,m, k = 2,j=1, sum = 0; Scanner sc = new Scanner(System.in); System.out.prin

2021-04-10 11:12:33 791

原创 java求素数

要求统计给定整数MM和NN区间内素数import java.util.Scanner;public class Test { public static void main(String args[]) { su(); } public static void su() { int mm, nn; Scanner sc = new Scanner(System.in); System.out.println("请输入mm和nn"); mm = sc.nextInt();

2021-04-10 10:38:49 66

原创 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 111

原创 c语言排序方法(快速排序 ,冒泡排序,选择排序,哈希表)。

**C语言快速排序**#include <stdio.h>#include<string.h>void quick_sort(int *a,int n){ int i,j,p,temp; if(n<2)return; p=a[n/2];//获取数组基准值 for(i=0,j=n-1;;i++,j--) { while(a[i]<p)//对元素进行遍历,假设左边的数据没有p中保存的元素大,那么继续寻找,并且把i自增,当找到比p大的或者相等得则停止

2021-01-09 18:51:05 402

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除