
数据结构与算法
文章平均质量分 65
数据结构与算法
野犬17
这个作者很懒,什么都没留下…
展开
-
自定义实现Java动态数组
写在前面通常,我们会用高级程序语言中的数组来描述线性表的顺序存储结构,而这种顺序表的特点时逻辑顺序与物理顺序相同,即数组中元素的内存地址是连续的。那么很显然,这样的数组(静态数组)是在空间被占满后再往里添加数据,就会发生溢出,进而导致程序崩溃。...原创 2022-03-27 00:35:31 · 1692 阅读 · 0 评论 -
自定义实现Java Queue队列
写在前面队列就像是我们平时排队一样,先来的人先享受服务,所以队列的一个重要特性就是先进先出(FIFO,First In First Out)。而在Java中,队列Queue的实现类非常多:那么在这里,我们就不一一描述这些实现类了,而是自定义实现队列,实现的方式也是基于两种基本的数据结构,数组和链表。利用数组实现队列利用数组实现队列的时候应该注意一点,那就是队伍本身是在移动的,当队首出队时,排在队首后面的人应该往前移动,就像是我们平时排队一样,队伍最前面的人走了,我们应该往前走一步,把空位补上。原创 2021-12-09 14:35:54 · 1401 阅读 · 0 评论 -
LeetCode:4.寻找两个正序数组中的中位数(median-of-two-sorted-arrays)Java完整代码
LeetCode:4.寻找两个正序数组中的中位数(median-of-two-sorted-arrays)方法一import java.util.Scanner;/** * 在这里给出对类 LC4MedianOfTwoSortedArrays 的描述。 * * @作者(yequan17) * @版本(2021.12.8) */public class LC4MedianOfTwoSortedArrays{ public static void main(String[] arg原创 2021-12-08 16:59:16 · 568 阅读 · 0 评论 -
LeetCode:4.寻找两个正序数组中的中位数(median-of-two-sorted-arrays)思路与题解
LeetCode:4.寻找两个正序数组中的中位数(median-of-two-sorted-arrays)问题描述思路方法一刚看到这题的时候,想也没想,直接暴力,先合并两个数组,然后排序,再输出中位数。整个过程无非就是注意一下几点:如果有一个数组为空怎么办。合并后数组长度是奇数还是偶数,在这两种情况下中位数的求法会有所差异。于是我们啪啪啪,行云流水,很快啊,就AC了。代码如下:class Solution { public double findMedianSortedA原创 2021-12-08 16:56:27 · 645 阅读 · 2 评论 -
自定义实现Java Stack栈
写在前面从某种角度来说,栈的FILO(first in last out)特性是一个非常有用的特性,正是这样的特性,让栈变得格外重要。所谓的FILO就是先进后出,先进来的元素后出去,后进来的元素先出去,就如同下图中一般。而在Java中,Java类库已经为我们提供来了Stack类来实现栈,并且这个Stack类是范型类,它可以存储不同的数据类型。那么接下来我们就来看一下,Java为我们提供了哪些Stack类方法。...原创 2021-12-07 20:47:08 · 652 阅读 · 0 评论 -
LeetCode:3.无重复字符的最长字串(longest-substring-without-repeating-characters) Java完整代码
LeetCode:3.无重复字符的最长字串(longest-substring-without-repeating-characters)题解和思路完整代码import java.util.*;/** * 在这里给出对类 LC3LStrWithoutReChar 的描述。 * * @作者(yequan17) * @版本(2021.12.7) */public class LC3LStrWithoutReChar{ public static void main(String[原创 2021-12-07 14:20:14 · 325 阅读 · 2 评论 -
LeetCode:3.无重复字符的最长字串(longest-substring-without-repeating-characters)思路与题解
LeetCode:3.无重复字符的最长字串(longest-substring-without-repeating-characters)题目描述思路这是典型的滑动窗口问题,即通过滑动窗口来找到最长的字串,我们来看一下具体过程:首先字符串abcabcbb如下:然后在字符串第一个位置展开窗口此时,窗口的起始位置start=0,终止位置end=0(注意字符串也是从0开始的),窗口的长度为length=end-start+1=1此时窗口内还没有重复元素,所以end向右移动一位,得到:此时原创 2021-12-07 14:12:59 · 496 阅读 · 0 评论 -
自定义实现Java ListNode链表
写在前面今天写代码的时候,发现我居然被Java的LinkList的输入卡了半天,所以就打算写一篇博客来整理一下LinkList。链表的定义首先LinkList就是链表,它的基本结构如下:及一个包含数据,和指针的结构,我们将一个节点的指针的节点指向下一个节点,这样就形成了一串链式结构,并称之为:链表。所以对于链表的定义如下:/** * Java ListNode 链表的各种定义方法 * * @作者(yequan17) * @版本(2021.12.6) */public class原创 2021-12-07 01:20:51 · 1765 阅读 · 0 评论 -
LeetCode:2.两数相加(add two numbers)Java完整代码
LeetCode:2.两数相加(add two numbers)题解与思路谁能想到,我居然被链表的输入给折磨了这么久!import java.util.*;/** * 在这里给出对类 LC2AddTwoNumbers 的描述。 * * @作者(yequan17) * @版本(2021.12.6) */public class LC2AddTwoNumbers{ /** * Definition for singly-linked list. */原创 2021-12-06 23:52:53 · 1206 阅读 · 0 评论 -
LeetCode:2.两数相加(add two numbers)思路与题解
题目描述思路对较短的链表后面补0,让两个链表的长度相同。然后用n1和n2表示这两个链表每一位的数字。同时注意进位的问题,可以定义一个carry,carry表示是否有进位,如果有则为1,否则为0。那么,sum=n1+n2+carry我们知道sum的取值范围为0~19,那么判断进位有两种方法:1.利用int类型的数字的整除会砍去小数点后面的方法,可以有 carry=sum/10,如果sum大于9,得到的carry为1,否则为02.直接判断,如果sum大于9,则会进位,否则不进位,则carry原创 2021-12-06 23:05:13 · 335 阅读 · 0 评论 -
LeetCode:1.两数之和(Two Sum)Java完整代码
这是包含输入的完整Java代码。LeetCode:1.两数之和(Two Sum)题解与思路方法一:import java.util.*;/** * 在这里给出对类 LC1TwoSum 的描述。 * LC1-暴力 * @作者(yequan17) * @版本(2021.12.5) */public class LC1TwoSum{ public static void main(String[] args){ Scanner sc=new Scanner(Syst原创 2021-12-05 17:58:54 · 786 阅读 · 0 评论 -
LeetCode:1.两数之和(Two Sum)思路与题解
LeetCode:1.两数之和(Two Sum)题目内容描述思路方法一:直接两层for循环嵌套,暴力求解两层for循环for(int i=0;i<nums.length;i++){ for(int j=0;j<nums.length;j++){ if(nums[j]==target-nums[i]){ result[0]=i; result[1]=j; } } }当找到nums[i]+原创 2021-12-05 17:55:12 · 297 阅读 · 0 评论 -
实验一 动态规划算法
问题描述:小明想要在王者荣耀游戏里晋升一个段位,假设他一共需打了n场比赛,且必须成功赢得至少70%的场次才能成功晋升。假设每场比赛小明获胜的概率分别=3为p1,p2,…,pn,请帮他算出成功晋级段位的概率是多少?输入:参数1:整数num(0<= num <=1000),表示比赛的场数。参数2:整数数组p[num] = {p1,p2,…,pnum},其中pi表示小明有pi%的概率赢得第i场比赛。(0 <=pi <= 100)输出:成功晋级段位的概率,保留小数点后5位,最后结原创 2021-10-30 20:10:38 · 671 阅读 · 0 评论 -
动态规划(Dynamic Programming)入门
前言算法实验课的题目是一道关于动态规划(Dynamic Programming)的题目,正好借这个机会,学习一下动态规划(Dynamic Programming)。动态规划简单介绍动态规划(Dynamic Programming,简称DP)的基本想法就是将原问题转化为一系列相互联系的子问题,然后通过逐层递推来求得最后的解。动态规划快速而高效解决问题的关键就是利用历史记录,来避免重复计算。动态规划的题目特点一般来说,我们面对各式各样的算法题,可能会有许多不同的想法,有些题目适合动态规划,有些题目可原创 2021-10-30 04:11:33 · 461 阅读 · 0 评论