java牛牛算法_Java算法题——牛牛消消乐
import java.util.*;public classSolution {/*** 返回两次操作后,数组元素之和的最小值
*@paramnums int整型一维数组 这你你需要操作的数组
*@returnlong长整型*/
public long minimumValueAfterDispel (int[] nums) {//write code here
Arrays.sort(nums);long sum = 0;//记录整个数组的和
long max = 0;//记录能够减去的最大值
for(int j=0;j
sum+=nums[j];int index1 =j;int index2 =j;int index3 =j;for(int i=0;i<=j;i++){while(index1 > 0 && nums[index1-1] >= nums[j]-nums[i]){
index1--;
}while(index2 > i && nums[index2-1] >= nums[j]-nums[i]){
index2--;
}while(index3 < nums.length && (long)nums[index3] < (long)nums[i]+nums[j]){
index3++;
}/*假设两次减去的数为a,b(a
1.a=nums[j]-nums[i] b=nums[i]
2.a=nums[i] b=nums[j]-nums[i]
3.a=nums[i] b=nums[j]
分段函数的边界:
1. index1 < i < j < nums.length 其实index1大于i时不碍事 i-index1变成负数不会影响max的计算
2. i < index2 < j < nums.length
3. i < j < index3 < nums.length
对于第一种情况 index1到i之间的数只能减去a 即 nums[j]-nums[i], i到j之间的数只能减去b 即nums[i] , j到最后的数可以减去a+b 即nums[j]
对于第二种情况 i到index2之间的数只能减去a 即 nums[i], index2到j之间的数只能减去b 即nums[j]-nums[i] , j到最后的数可以减去a+b 即nums[j]
对于第三种情况 i到j之间的数只能减去a 即 nums[i], j到index3之间的数只能减去b 即nums[j], index3到最后的数可以减去a+b 即nums[j]+nums[i]*/
long tmp1 = (i-index1)*((long)nums[j]-nums[i]) + (j-i)*(long)nums[i] + (nums.length-j)*(long)nums[j];long tmp2 = (index2-i)*((long)nums[i]) + (j-index2)*((long)nums[j]-nums[i]) + (nums.length-j)*(long)nums[j];long tmp3 = (j-i)*(long)nums[i] + (index3-j)*(long)nums[j] + (nums.length-index3)*((long)nums[i]+nums[j]);
max=Math.max(max,tmp1);
max=Math.max(max,tmp2);
max=Math.max(max,tmp3);
}
}return sum -max;
}
}
java牛牛算法_Java算法题——牛牛消消乐相关推荐
- 希尔排序的java算法_Java算法系列篇 【希尔排序】
什么? 搞Java不会算法? 由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例 及时分享 感兴趣的欢迎交流 希尔排序 描述: 基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直 ...
- java 兔子问题_Java算法之“兔子问题”
Java算法中的兔子问题,假设有一只兔子,从出生后的第三个月起每个月都生一只兔子,小兔子长到第三个月后每个月又能生一只兔子,假设兔子都不死,问每个月的兔子总数是多少? 在写代码之前先想明白算法,假设第 ...
- java实现fifo算法_java算法:FIFO队列
java算法:FIFO队列 FIFO队列是一个ADT,由两个基本操作构成:插入(放入)一个新项,删除(得到)最早插入的项. 例1:FIFO队列ADT接口 Java代码 interfaceintQueu ...
- java递推_Java算法-递推算法思想
递推算法是常用的算法思想,在数学计算等方面有着广泛的应用.递推算法适合有着明显公式的规律场合. 一.递推算法基本思想 递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推导而得到结果.递推 ...
- java插入法排序_java算法之插入排序法
思想:插入排序法的思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的 ...
- java最大值最小值_java算法-最大值、最小值
java求最大值的三种方法 一般方法: public class maxtest { public static void main(String[] args) { //############## ...
- java 链表复制_Java 算法 - 复制带随机指针的链表
前段时间在做一个项目,所以没有时间做面试题,最近才将那个科创项目做的差不多了,于是开始做面试题了. 题意: 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一 ...
- java 创建水果_java程序题:定义一个抽象类-水果,其中包括getWeight()方法,编写程序分别创建苹果、...
java程序题:定义一个抽象类-水果,其中包括getWeight()方法,编写程序分别创建苹果. 关注:286 答案:3 信息版本:手机版 电脑版 解决时间 2021-01-17 06:08 提问 ...
- java解决兔子_JAVA编程题-用java解决兔子问题
题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 解答: 分析:从第一对兔子开始,第1个月1对兔 ...
最新文章
- 专治选择综合征——Bandit算法
- 如何使用JavaScript将数据附加到div?
- 与aspect长得像的单词_长相差不多的单词,你能一眼识别吗?
- java文件file字符集_获取文件字符集(或文件编码) 的工具类
- 第四讲 数学公理化方法(上)
- Sqlserver2008相关配置问题
- web端log4net输出错误日志到mysql
- 和媳妇加一起月薪三万五想换车了不知道x5养的起吗?
- 【笑话】骂人的最高境界
- JAVASCRIPT 基本数据类型
- 思路不清晰还想月薪过万?学会这4招,升职加薪有望
- 2010年最令人期待的10款视频游戏
- Kafka从上手到实践 - 庖丁解牛:Topic Broker | 凌云时刻
- 计算机科学与技术与微电子科学与工程,微电子科学与工程专业就业前景如何 有前途吗...
- 改变不需要时间和地点的条件
- C语言多多搬果子思路,看图写话《小刺猬搬果子》
- 722 | Crypto Tech Night第五期分享会,参会通道开放中
- specified sample format s16 is invalid or not supported(linux)
- Android 权限被拒绝,跳转至权限设置界面
- Eigen介绍及简单使用
热门文章
- spyder 运行时闪退_记一次spyder打不开(闪退)之后,心累的恢复历程
- 完数什么意思_完数什么意思_苹果序列号字母和数字都代表什么含义 iPhone的序列号字母与数字含义......
- 基于单片机HX711电子秤自动计价系统设计-基于单片机GPRS远程测控系统设计-818基于单片机循迹避障无线遥控蓝牙智能小车-基于单片机24s倒计时篮球积分器系统-基于单片机智能洗衣机控制系统
- VC++6.0 修改项目工程名称
- rtx3060和gtx1080选哪个rtx3060和gtx1080差距
- 电影《剑鱼行动》观后感
- 在IIS中实现JSP
- OSChina 周五乱弹 ——饿的时候只有一个饼!还是画的!
- 怎么删除supervisor_supervisord进程管理工具
- 基于vue + axios + lrz.js 微信端图片压缩上传