考虑两个数组列表
a = [1,4,2,4]
b = [3,5]
我想返回B中每个数字的计数小于A中的数字。
所以答案将是[2,4]
,因为B中的3在A中有2个数字,即<= 3,即[1,2]
B中的5具有A中的4个数字,这些数字<= 5。即[1,4,2,4]
注意:我尝试使用2个循环,但测试用例超时。
这是代码
static ArrayList<Integer> counting(ArrayList<Integer>A, ArrayList<Integer>B)
{
ArrayList<Integer> finallist = new ArrayList<>();
for(int i : B)
{
int count = 0;
for(int j: A)
{
if(j<=i)
count++;
}
finallist.add(count);
}
return finallist;
}
我们应该编辑函数并返回arraylist
答案 0 :(得分:1)
当我看到一个数组时,我需要查找 smth。因此,这是使用二进制搜索的魔术键。这使您O(n log n)
的时间变得很复杂。
public static int[] findLessNumbers(int[] a, int[] b) {
TreeMap<Integer, Integer> numCount = new TreeMap<>();
for (int aa : a)
numCount.put(aa, numCount.getOrDefault(aa, 0) + aa);
int total = 0;
for (Map.Entry<Integer, Integer> entry : numCount.entrySet())
numCount.put(entry.getKey(), total += entry.getValue());
int[] res = new int[b.length];
for (int i = 0; i < res.length; i++)
res[i] = Optional.ofNullable(numCount.floorKey(b[i])).orElse(0);
return res;
}
答案 1 :(得分:0)
我从您的问题中了解到,您找不到答案。 希望对您有所帮助。
您的代码在对函数参数进行计数时遇到问题,您应该声明所期望的数据类型是什么。
static ArrayList counting(List A, List B)
这不是一种方法
相反,您应该写static ArrayList counting(ArrayList<Integer> A, ArrayList<Integer> B)
这将解决您的问题。
这是我的解决方案:
计数功能。
private static ArrayList counting(ArrayList<Integer>A, ArrayList<Integer>B ){
ArrayList<Integer> finallist = new ArrayList<>();
for(int i : B) {
int count = 0;
for(int j : A) {
if(j <= i) {
count++;
}
}
finallist.add(count);
}
return finallist;
}
主叫方计数:
ArrayList<Integer> ans = counting(A,B);
for(int i : ans) {
System.out.print(i+" ");
}
输出:
2 4
这可以解决您面临的问题。