当前位置:网站首页>LeetCode240+312+394
LeetCode240+312+394
2022-08-01 06:43:00 【想进阿里的小菜鸡】
思路
从每行的最后一个元素开始判断是向下进行还是向左进行。
代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = 0;
int col = matrix[0].length-1;
while(row<matrix.length && col >=0){
if(matrix[row][col] == target){
return true;
}else if(matrix[row][col]<target){
row++;
}else{
col--;
}
}
return false;
}
}思路
本题关键就是把某个位置的气球当做最后戳破的气球。先将其左右两边的气球都戳破再戳当前位置的气球。
1.定义dp数组
dp[i][j]:表示从i下标开始到j下标结束,戳破气球后的最大值。
2.初始化dp数组
dp[i][i]需要初始化,其他的不需要初始化,dp[i][i]就是长度为1的时候的取值。因为要从下标为0的元素开始计算,dp[0][0]计算不方便,所以就用新的数组newNums来代替新的数组。在旧的数组的基础上,在其头尾都增加两个值为1的元素。然后让i从1开始初试化dp数组。
3.确定递推公式
要让最后一个戳破的气球的下标是k,然后从i->j进行遍历,每次遍历的结果都和之前的结果比较取最大值。
res[i][j] = Math.max(res[i][j],newNums[i-1]*newNums[k]*newNums[j+1]+res[i][k-1]+res[k+1][j]);
4.确定遍历顺序
按照正序遍历即可。
5.打印dp数组
dp[1][nums.length]就是最后的结果。因为我们重新重建了一个数组newNums,所以数组头尾下标各自+1了。
代码
class Solution {
public int maxCoins(int[] nums) {
int[] newNums = new int[nums.length+2];
for(int i =1;i<=nums.length;i++){
newNums[i]=nums[i-1];
}
newNums[0] = 1;
newNums[nums.length+1]=1;
int[][] res = new int[nums.length+2][nums.length+2];
for(int i = 1;i<=nums.length;i++){
res[i][i]=newNums[i-1]*newNums[i]*newNums[i+1];
}
for(int length = 2;length<=nums.length;length++){
for(int i = 1;i+length-1<=nums.length;i++){
int j = i+length-1;
for(int k = i;k<=j;k++){
res[i][j] = Math.max(res[i][j],newNums[i-1]*newNums[k]*newNums[j+1]+res[i][k-1]+res[k+1][j]);
}
}
}
return res[1][nums.length];
}
}思路
因为该题可以括号里面嵌套括号,所以需要使用栈来实现,又因为有数字和字符,所以需要用两个栈来实现。一个用来放数字一个用来放字符。然后遍历字符串进行判断。
如果是数字就计算数字的值放入对应的栈中,如果是字符就把字符拼接起来,遇到‘[’再放入栈中;如果是‘]’,就将字符栈中的字符取出来和当前字符拼接,得到新的字符串。
代码
class Solution {
public String decodeString(String s) {
if(s == null && s.length() == 0){
return s;
}
Stack<Integer> count = new Stack<>();
Stack<String> stringStack = new Stack<>();
String res = "";
int index = 0;
while(index < s.length()){
if(Character.isDigit(s.charAt(index))){
int temp = 0;
while(Character.isDigit(s.charAt(index))){
temp = temp*10+(s.charAt(index)-'0');
index++;
}
count.push(temp);
}else if(s.charAt(index) == '['){
stringStack.push(res);
res = "";
index++;
}else if(s.charAt(index) == ']'){
StringBuilder tempString = new StringBuilder(stringStack.pop());
int time =count.pop();
for(int i = 0;i<time;i++){
tempString.append(res);
}
index++;
res = tempString.toString();
}else{
res+=s.charAt(index);
index++;
}
}
return res;
}
}边栏推荐
- 响应式织梦模板园林花卉类网站
- Bean的生命周期
- 说说js中使用for in遍历数组存在的bug
- mysql中添加字段的相关问题
- 使用string 容器翻转 字母
- leetcode43 string multiplication
- Qt Widget 项目对qml的加载实例
- "By sharing" northwestern university life service | | bytes a second interview on three sides by HR
- 对话MySQL之父:一个优秀程序员可抵5个普通程序员
- datagrip 报错 “The specified database userpassword combination is rejected...”的解决方法
猜你喜欢

太厉害了,终于有人能把文件上传漏洞讲的明明白白了

crypto-js使用

matlab simulink 粒子群优化模糊pid控制的电机泵

MATLAB program design and application of MATLAB 2.5

Information system project managers must recite the work of the core test site (56) Configuration Control Board (CCB)

Srping中bean的生命周期

基于MATLAB的BP神经网络进行语音特征信号分类

Vim三种模式

零代码网站开发利器:WordPress

Data organization -- singly linked list of the linear table
随机推荐
NIO编程
【南瓜书ML】(task4)神经网络中的数学推导(更新ing)
从离线到实时对客,湖仓一体释放全量数据价值
NUMPY
uva12326
信息系统项目管理师必背核心考点(五十六)配置控制委员会(CCB)的工作
Induction jian hai JustFE 2022/07/29 team, I learned the efficient development summary (years)
Why is the lightweight VsCode used more and more?Why eat my C drive 10G?How to Painlessly Clean VsCode Cache?Teach you how to lose weight for C drive
NIO programming
Compare two objects are the same depth
Vim三种模式
第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】
响应式织梦模板园林景观类网站
Qt Widget 项目对qml的加载实例
【FiddlerScript】利用FiddlerScript抓包保利威下载
第5章——以程序方式处理MySQL数据表的数据
上课作业(7)——#598. 取余运算(mod)
Win任务栏图标异常解决
matlab wind speed model wavelet filtering
旋度(7)连接失败localhost8080;连接拒绝了