一、“气球” 的最大数量(LeetCode-5189)

1.1 题目描述

1.2 解题思路

统计各个字母的出现的次数,然后根据“木桶最短板”返回就好。

1.3 解题代码


public class Solution { public int maxNumberOfBalloons(String text) { int[] arr = new int[5];
char[] charArray = text.toCharArray();
for(char ch:charArray){
if(ch == 'a'){
arr[0]++;
}
if(ch == 'b'){
arr[1]++;
}
if(ch == 'l'){
arr[2]++;
}
if(ch == 'o'){
arr[3]++;
}
if(ch == 'n'){
arr[4]++;
}
}
int res = -1;
for(int i = 0;i<5;i++){
if(i == 2 || i == 3){
res = arr[i]/2 > res && res != -1 ? res:arr[i]/2;
}else{
res = arr[i] > res && res != -1? res:arr[i];
}
}
return res;
} }

二、反转每对括号间的子串(LeetCode-1190)

2.1 题目描述

2.2 解题思路

使用递归去解,每次只反转最里层括号的字符串,每次递归返回时将字符串外的括号去掉,终止条件为,字符串不存在括号。

2.3 解题代码


public class Solution { public String reverseParentheses(String s) {
int len = s.length();
int left = -1;
int right = len + 1;
//获取最靠右的左括号
for (int i = 0; i < len; i++) {
if (s.charAt(i) == '(') {
left = Math.max(i, left);
} }
//获取最靠左的右括号
for (int i = 0; i < len; i++) {
//注意边界,right应该大于left
if (s.charAt(i) == ')' && i>left) {
right = Math.min(i, right);
}
}
// 如果不存在括号,则返回字符串终止
if (left == -1 && right == len + 1) {
return s;
}
//对括号内的字符串进行反转
String tmp = new StringBuilder(s.substring(left + 1, right)).reverse().toString();
//去除括号,进行拼接
tmp = s.substring(0,left) + tmp + s.substring(right+1,len);
//进行递归
return reverseParentheses(tmp);
} }

三、K 次串联后最大子数组之和(LeetCode-5191)

3.1 题目描述

3.2 解题思路

考虑好所有的情况。

  • 如果k = 1,则取最大子字符串之和

  • 如果数组是{1,1,16,-15,10,1,3},则需要找到leftMax、rightMax,然后加上单个数组全部元素之和 *(k-2)。

  • 如果数组是{1,1,16,-15},则需要找到Math.max(leftMax、rightMax),然后加上单个数组全部元素之和 *(k-1)。

  • 如果数组是{1,2,3,4},则结果是单个数组全部元素之和 * k。

3.3 解题代码


public class Solution { public static int MOD = (int) (1e9 + 7); public int kConcatenationMaxSum(int[] arr, int k) {
long sum = 0;
long res = 0;
int len = arr.length;
int leftMax = 0;
int rightMax = 0;
// 统计固定左端点,从左往右最大和
for (int i = 0, cur = 0; i < len; i++) {
cur += arr[i];
leftMax = Math.max(leftMax, cur);
}
// 统计固定右端点,从右往左最大和
for (int i = len - 1, cur = 0; i >= 0; i--) {
cur += arr[i];
rightMax = Math.max(rightMax, cur);
}
// 最大的子数组
for (int i = 0, cur = 0; i < len; i++) {
cur += arr[i];
if (cur < 0) {
cur = 0;
}
res = Math.max(res, cur);
}
//获取数组之和
for (int t : arr) {
sum += t;
}
if (k == 1) {
return (int) res % MOD;
} //1.取所有sum
res = Math.max(res, sum * k);
//2.只拼接一边之和
res = Math.max(res, sum * (k - 1) + Math.max(leftMax, rightMax));
//3.左右最大子串之和
res = Math.max(res, sum * (k - 2) + leftMax + rightMax);
//4.sum < 0
res = Math.max(res, leftMax + rightMax);
res = res % MOD;
return (int) res; }
}

最新文章

  1. [每日菜单]lunch menu for Wednesday, February 24 2016
  2. SQL2005 数据库——查看索引
  3. IOS GCD 浅析
  4. Unity开发 资源准备
  5. Yii查看执行的SQL
  6. [原创]PostgreSQL中十进制、二进制、十六进制之间的相互转换
  7. scala学习笔记(8): 列表的map,flatMap,zip和reduce
  8. 南京邮电大学CTF隐写术部分Writeup
  9. 真机调试报错:Could not find Developer Disk Image 或 Could not locate device support files.
  10. 一些YY
  11. Android studio 中引用jar的其实是Maven?(二)
  12. SQL FOREIGN KEY 约束
  13. 《linux就该这么学》第十五节课:第14,15章,dhcp服务和邮件系统
  14. centOS7防火墙关闭失败问题
  15. SimpleDateFormat 使用时出现的线程同步问题。。。
  16. mysql explain中的type列含义和extra列的含义
  17. 【liferay】5、使用PortletURL进行跨portlet通信 liferay6.2
  18. Spark记录-Scala数组/List/Map/Set
  19. Android 之 获取地理位置及监听
  20. SpringMVC工作原理详解

热门文章

  1. js编写日历的思路
  2. springmvc集成cxf的方法
  3. Oracle 检索数据(查询数据、select语句)
  4. c#生成高清字体图片
  5. net webapi jwt验证授权
  6. with读、写文件
  7. 聊Java中的任务调度的实现方法及比较
  8. python中的debug
  9. 关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named &#39;_ctypes&#39;的解决办法
  10. gitlab及jenkins