被一道JAVA算法题难住了,请各位帮忙看下。

问题描述

数组 C[I] = A[I] + B[I] / 1,000,000.例如 A 和 B: A[0] = 0B[0] = 500,000 A[1] = 1B[1] = 500,000 A[2] = 2B[2] = 0 A[3] = 2 B[3] = 0 A[4] = 3B[4] = 0 A[5] = 5B[5] = 20,000则 C: C[0] = 0.5 C[1] = 1.5 C[2] = 2.0 C[3] = 2.0 C[4] = 3.0 C[5] = 5.02寻找一对下标(P, Q) 满足 0 ≤ P < Q < N 且 C[P] * C[Q] ≥ C[P] + C[Q].上面的数组中满足条件的有:(1, 4), 1.5 * 3.0 = 4.5 ≥ 4.5 = 1.5 + 3.0,(1, 5), 1.5 * 5.02 = 7.53 ≥ 6.52 = 1.5 + 5.02,(2, 3), 2.0 * 2.0 = 4.0 ≥ 4.0 = 2.0 + 2.0,(2, 4) and (3, 4), 2.0 * 3.0 = 6.0 ≥ 5.0 = 2.0 + 3.0.(2, 5) and (3, 5), 2.0 * 5.02 = 10.04 ≥ 7.02 = 2.0 + 5.02.(4, 5), 3.0 * 5.02 = 15.06 ≥ 8.02 = 3.0 + 5.02.现要求写个方法:class Solution { public int solution(int[] A, int[] B); }给出数组 A and B, 分别包含N个非负整数, 返回满足条件的下标对个数.如果满足条件的下标对超过 1,000,000,000, 则返回 1,000,000,000.例如,给出: A[0] = 0B[0] = 500,000 A[1] = 1B[1] = 500,000 A[2] = 2B[2] = 0 A[3] = 2B[3] = 0 A[4] = 3B[4] = 0 A[5] = 5B[5] = 20,000此方法应返回 8.假设:N 是整数,取值范围 [0..100,000];数组A中的元素取值范围 [0..1,000];数组B中的元素取值范围 [0..999,999];数组C中的元素为非递减.复杂度要求:最坏的情况下,时间复杂度 O(N);最坏的情况下,空间复杂度 O(1), 不包括参数的存储空间.

解决方案

分析如下:从a*b>=a+b可以推到出:a*b>=4或者a*b=0同时必须满足a>1&b>1,这个可以通过数学方法得到.由于a, b都是大于0的,所以我们可以依据以上规则对如上题目做这样一个优化:求一个数组(P[n]无序),找到该数组下所有的二元组合(a[i],a[j])其中0<=i<=j<n,满足条件a[i]*a[j]>=4或者a[i]*a[j]==0的所有组合列表,同时满足时间复杂度为O[n],空间复杂度为O[1].如果如上推论是正确的话,那么后面就是算法的选择问题了。1 通过数组A[i]和B[i]算出数组C[i]2 排序C[i]数组,时间复杂度为O[n],如基数排序?3 针对排序后的数据做如下操作,3.1 找到这样一个下标i,使得C[i-1]<2,C[i]>=2,如这样一个数据[0,1.1,1.1,1.5,1.6,2,2.3,5,7,8,10],这样的好处就是,对于i以后的任何组合,你都可以确定他们满足C[i]*C[j]>=C[i]+C[j]。所以仅需要满足C[0]--C[i-1]到C[i]到C[n]的组合,满足条件C[i]*C[j]>=C[i]+C[j]。3.2 分别定义连个小标i,j,使得i+1=j并且C[i]<2,C[j]>=2, 因为根据这样一个条件,如果C[i]*C[j]>=4,那么C[i]*C[k]>=4(k>j)肯定满足,同理如果C[i]*C[j]>=4不满足,那么C[k]*C[j]>=4(k<i)肯定也不满足.所以可以做一个循环分别计算C[0],C[i]之间各个参数满足条件的组合个数,计算出即可。当然在3.2中你其实还是可以找到另外一个下标k使得C[k-1]<=1,C[k]>1,因为如果C[k]<=1,那么肯定不能满足这个组合条件了。
解决方案二:
这个题中只要 C[P]和C[Q]都是大于1的数那么C[P]*C[Q]就是始终大于C[P]+C[Q]( 即C[P]>=1&&C[Q]>=1 就会出现C[P]*C[Q]>=(C[P]+C[Q]))

时间: 2024-10-01 11:08:24

被一道JAVA算法题难住了,请各位帮忙看下。的相关文章

java web连接access数据库报错,请大家帮忙看下

问题描述 代码如下:publicclassWriteToAccess{publicvoidsaveFamilyInfo(List<Family>list){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";StringconnectDB="jdbc:odbc:test";//StringconnectDB="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb,*.a

java算法题,公司的笔试题

问题描述 java算法题,公司的笔试题 suppose you have N cakes, N is an interger>0 // at each time, you can either eat 1 cake, or 2 cakes or 3 cakes // PROBLEM: How many ways can you eat all N cakes // for example, N = 4, (1,2,1) and (1,1,2) are considered to be diffe

百度知道-【java算法题】凑凑凑凑凑凑字数

问题描述 [java算法题]凑凑凑凑凑凑字数 题目:标题:猜字母???把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串.???接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母.??得到的新串再进行删除奇数位置字母的动作.如此下去,最后只剩下一个字母,请写出该字母./-----------------------------------从百度知道查看但是不懂 1024 和他的思维求大神解惑 /----------------------

时间复杂度-求解一道acm算法题,在线等!!

问题描述 求解一道acm算法题,在线等!! 有N个D维向量,求解每个向量到其他向量的最短距离. 只要求解每个向量到其他向量的最短距离就可以了. 距离采用欧式距离表示. 时间复杂度近似于O(DN) 解决方案 http://zhidao.baidu.com/link?url=Xt0N7upNLbk_Ik4uBxPx6Nl2n3JVp_ry9Of6YAnvQiVIkwuCXuiIPSoanHbeaf07M8zjTy-qpD4A4iFe1dXDuq

设计-一道二重积分算法题,要求复杂度低于n^2

问题描述 一道二重积分算法题,要求复杂度低于n^2 对于x∈X{x0,x1,x2,...,xn-1},y∈Y{y0,y1,y2,...,yn-1},又已知一个矩阵C,C中的元素C(i,j)的值为p(xi,xj) 设计一个算法计算 假设这里log(.)属于基本算符,有没有让它的复杂度低于n^2的方法? 解决方案 每天一道算法题2 删除链表结点(时间复杂度为O(1)))

问一道编程题目,大家帮忙看下谢了

问题描述 问一道编程题目,大家帮忙看下谢了 拼点游戏 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 C和S两位同学一起玩拼点游戏.有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数.C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获得三颗巧克力,小者获得一颗巧克力,如果点数相同,每人各得二颗巧克力,使用过的卡牌不得重复使用.已知C和S取到的卡牌点数,请编程计算S最多和最少能得到多少颗巧克力. 输入 输

软件开发-JAVA在下载的时候报错,各位大神路过顺便帮忙看下吧

问题描述 JAVA在下载的时候报错,各位大神路过顺便帮忙看下吧 ClientAbortException: java.io.IOException at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:368) at org.apache.catalina.co

Thinking in java 可变 参数列表问题,请各位帮忙解决。

问题描述 Thinking in java 可变 参数列表问题,请各位帮忙解决. public class OverloadingVarargs3 { static void f(float i Character... args) { System.out.println(""first""); } static void f(char c Character... args) { System.out.println(""second&quo

sftp下载zip文件-java从sftp上下载到本地磁盘的zip文件读取不了,请大家帮忙解答下,谢谢!

问题描述 java从sftp上下载到本地磁盘的zip文件读取不了,请大家帮忙解答下,谢谢! 从sftp上下载到本地的zip文件是没问题的,用压缩工具打开能查看里面的文件,为什么就是读取不了呢? java从sftp下载zip文件到本地磁盘代码: import java.io.InputStream; import java.util.Date; import com.ibm.gbs.ai.portal.framework.util.DateUtils; import com.jcraft.jsch