栈与队列

栈与队列是常用的数据结构,其中栈提供先进后出,队列提供先进先出,这样的数据结构可以解决一些需要顺序解决的问题。在java中实现底层是不一样的原因是栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。

在Java中,队列和栈是两种常见的数据结构,它们分别用于不同的场景,而它们的实现通常基于以下几种容器:

Read more

字符串

  • 字符串也就相当于一种字符数组,它在java中有许多的库函数比如:
  1. charAt(int index): Returns the character at the specified index in the string.

    1
    2
    String str = "Hello";
    char character = str.charAt(0); // Returns 'H'
Read more

数组

定义:

数组是存放在连续内存空间上的相同类型数据的集合。

知识

Read more

哈希表

一般哈希表都是用来快速判断一个元素是否出现集合里。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。Hash法的优势就是牺牲了空间去换了时间,在工业场景中也很适用。

实现理论

哈希函数打比方:就是将学生姓名映射为哈希表上的索引,通过特定编码方式生成hashCode。如果hashCode超过哈希表大小(tableSize),会进行取模操作以确保映射在表内。但如果学生数量大于表大小,可能导致多个学生映射到同一索引位置。

Read more

动态规划6

583. 两个字符串的删除操作

力扣题目链接

相比之前现在两个字符串都可以删除,

  1. 确定dp数组(dp table)以及下标的含义

dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数

这里和原来的匹配长度的dp定义不同,

Read more

动态规划5

300.最长递增子序列

力扣题目链接

本题要先有一个逻辑,就是我们怎么确定一个状态转移,如果我dp要取这个数那么之前的状态怎么找,所以很明显需要两轮遍历,

Read more

动态规划3

完全背包

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。

完全背包和01背包问题唯一不同的地方就是,每种物品有无限件

代码上两者最大的不同就是遍历顺序

Read more

动态规划2

背包问题

01 背包

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

举一个例子:

背包最大重量为4。

物品为:

重量 价值
物品0 1 15
物品1 3 20
物品2 4 30

问背包能背的物品最大价值是多少?

Read more