—————  第二天  —————

举个例子,给定如下数组:

要删除哪个元素,才能使得剩余元素的乘积最大呢?

显然应该删除元素2:

剩余元素的乘积  = 5 X 8 X 6 X9 X 7 = 15120

————————————

小灰把面试题目告诉给了大黄......

数组中哪个负数的绝对值最小呢?显然是元素-2:

我们删去元素-2,原本数组中的三个负数变成了两个,负负得正,而且保证了剩余元素的乘积最大。

数组中哪个非负元素最小呢?显然是元素3:

我们删去元素3,数组中剩余元素的乘积仍然是正数,而且绝对值最大。

数组中哪个负数元素的绝对值最大呢?显然是元素-9:

既然剩余元素的乘积无论如何都是负的,我们就索性删去绝对值最大的元素-9,使得剩余元素乘积的绝对值尽可能小。

总结一下,需要考虑的数组元素情况共有三种:

  • 情况A:奇数个负数

  • 情况B:偶数(包括0)个负数

    • 子情况:没有非负数

public static int findRemovedIndex(int[] array){  // 1.统计负元素的个数   int negativeCount = 0; for(int i=0; i<array.length; i++){    if(array[i] < 0){    negativeCount ++; }   }   // 2.根据不同情况,选择要删除的元素 int tempIndex = 0; if((negativeCount&1)==1){ //情况A:负数个数是奇数    for(int i=1; i<array.length; i++){    if(array[i] < 0){    if(array[tempIndex]>=0 || array[i]>array[tempIndex]){    tempIndex = i; }   }   }   return tempIndex;   } else {    //情况B:负数个数是偶数    if(array.length == negativeCount){    //子情况:所有元素都是负数   for(int i=1; i<array.length; i++){    if(array[i] < array[tempIndex]){ tempIndex = i; }   }   return tempIndex;   };  for(int i=1; i<array.length; i++){    if(array[i] >= 0){  if(array[tempIndex]<0 || array[i]<array[tempIndex]){  tempIndex = i; }   }   }   return tempIndex;   }
}
public static void main(String[] args) {    int[] array1 = {-4,3,-5,-7,-21,9,-1,5,6};  int index = findRemovedIndex(array1);  System.out.println("删除元素下标:"+ array1[index]); int[] array2 = {4,3,5,-7,-21,9,-1,-5,6,0}; index = findRemovedIndex(array2);  System.out.println("删除元素下标:"+ array2[index]); int[] array3 = {-4,-3,-5,-7,-21,-9,-1,-8}; index = findRemovedIndex(array3);  System.out.println("删除元素下标:"+ array3[index]);
}

这段代码实现包含两步:

1.遍历数组,统计数组当中负数元素的个数。

2.根据负数元素的奇偶性,选择不同的处理方式。

上面这个数组是典型的情况B,即负数个数是偶数的情况。那么要想让剩余元素乘积最大,我们只要删除最小的非负元素,也就是删除元素0即可:

—————END—————

《漫画算法》

本书是全彩印制,书中的每一章、每一节、每一句话、每一幅图、每一行代码,都经过了小灰和编辑们的精心打磨,力求用最为直白的方式把知识讲明白、讲透彻。

对于渴望学习算法的小伙伴,无论你是正在学习计算机专业的学生,还是已经进入职场的新人,亦或是拥有多年工作经验却不擅长算法的老手,这本《漫画算法》都能帮助你告别对算法的恐惧,认识算法、掌握算法。

扫码购买

漫画:去掉一个数,如何让剩余的数乘积最大?相关推荐

  1. json格式的数据集中每一条数据5个选项随机去掉一个错误选项,剩余选项重新排序

    json文件中每一条数据5个选项随机去掉一个错误选项,剩余选项重新排序 json格式的数据集中含有5个选项,随机去掉一个错误选项,剩余选项重新排序. 数据集示例: [{"context&qu ...

  2. Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)

    1. keys 键相关命令 命令 说明 dbsize 返回当前数据路的key数量 exists key 测试指定key是否存在 expire key seconds 为key指定过期时间 type k ...

  3. C语言判断一个数是否是回文数

    C语言判断一个数是否是回文数 #include <stdio.h> int main(){int num, s, y = 0;printf("请输入一个数字: ");s ...

  4. Linux上如何查看物理CPU个数,核数,线程数

    首先,看看什么是超线程概念 超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的 ...

  5. C++判断一个数是否为回文数palindrome的算法(附完整源码)

    C++判断一个数是否为回文数palindrome的算法 C++判断一个数是否为回文数palindrome的算法完整源码(定义,实现,main函数测试) C++判断一个数是否为回文数palindrome ...

  6. Java黑皮书课后题第6章:**6.3(回文整数)使用下面的方法头编写两个方法:……使用reverse方法实现isPalindrome。如果一个数字的逆序数和它自身相等,这个数就称为回文数。

    6.3(回文整数)使用下面的方法头编写两个方法:--使用reverse方法实现isPalindrome.如果一个数字的逆序数和它自身相等,这个数就称为回文数. 题目 题目概述 破题:假设没有提示语句( ...

  7. java判断五位数回文数_【视频+图文】Java经典基础练习题(五):键盘输入一个五位数,判断这个数是否为回文数...

    能解决题目的代码并不是一次就可以写好的 我们需要根据我们的思路写出后通过debug模式找到不足再进行更改 多次测试后才可得到能解决题目的代码! 通过学习,练习[Java基础经典练习题],让我们一起来培 ...

  8. 判断一个数是否是回文数(Java)

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net package live.every.day.Pro ...

  9. python判断一个数是否为回文数

    判断一个数是否为回文数(正向读和反向读结果一样) num = raw_input('请输入要判断是否为回文数的数:') if (num[::-1] == num[:]):       print '% ...

最新文章

  1. 电子计算机说明文作文,电脑事物说明文
  2. Seven Segment Display
  3. 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例
  4. 在java中的ascii_在Java中绘制ASCII艺术
  5. 润乾报表分组求和_实现报表数据预先计算
  6. c++模板---3(类模板碰到继承问题,类模板类外实现,类模板与友元函数)
  7. 地磅称重软件源码_电脑设备器件+塔吊主吊臂+撇渣管、丝杆+地磅称重传感器+极柱触头盒弯板+批式循环谷物干燥机+升降机标准节...
  8. CentOS7 源码编译安装Python3 shell脚本
  9. 【动态规划1】动态规划的引入(今天刷洛谷了嘛)
  10. 读《高性能网站建设指南》有感
  11. sqlite数据库基础学习
  12. 航测空三用的软件_航测数据处理答疑55问!涉及CC、Pix4D、Photoscan、EPS等常见软件问题...
  13. 使用ESAPI 解决veracode 漏洞
  14. win10升级补丁_官方win10教育版怎么样
  15. php网站挂马,网页挂马详细教程
  16. infer的用法_使用 Infer 进行代码扫描
  17. 码绘与手绘——表达动态
  18. 基于SSM的家政服务管理系统
  19. 小白电脑选购与组装之配置篇
  20. ps如何裁剪掉图片中间不需要的部分

热门文章

  1. 转载-配置tomcat让shtml嵌套文件显示
  2. jQuery函数$(window).load事件
  3. 看看什么样的人适合网上开店( 转载)
  4. HDU.1004 Let the Balloon Rise
  5. 记录——《C Primer Plus (第五版)》第十章编程练习第十一题
  6. 2. 字符串、向量和数组
  7. 中国水泥板市场趋势报告、技术动态创新及市场预测
  8. mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数
  9. java形状函数_java基础:10.4 Java FX之形状
  10. 区块链只能算半个“信任机器”,隐私计算才是真正的信任机器?