如何计算数组中的负数?

时间:2018-11-27 12:56:26

标签: java

在黑客排名问题中,我想计算负数。如果计数大于整数k,则必须打印no。否则,是的。我收到运行时错误。有什么方法可以更快计数?

我的代码去了

public class Solution {

    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        int t = s.nextInt();

        for (int l = 0; l < t; l++) {
            int count = 0;
            int k = s.nextInt();
            int n = s.nextInt();
            ArrayList<Integer> al  =new ArrayList();

            for (int i = 0; i < n; i++) {
                al.add(s.nextInt());
            }

            Collections.sort(al);

            for (int c : al) {
                if (c <= 0) {
                    count += 1;
                } else
                    break;
            }

            if ((count >= k) || (count == k)) {
                System.out.println("NO");
            } else {
                System.out.println("YES");
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

排序^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+:\d* 为O(n log n)。用计数器在^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)*:\d* 上进行一次遍历是O(n)。如果您可以停止使用ArrayList<Integer>读取输入内容,请不要排序,不要存储其他临时变量,请退出到达ArrayList的那一刻退出:

k

答案 1 :(得分:0)

只需遍历您的列表,然后检查当前数字是否小于零,因此您将得到一个负数。每当这个事实成立时,就增加您的数量。简单容易!这也不是慢的,并且是处理此问题的正常方法。如果您可能拥有数万亿个数字,并且还知道集合的确切大小,则可以将集合分为不同的部分(关键字“分而治之”)。然后对自己线程中的每个部分进行此迭代。

吻-保持简单愚蠢

int count = 0;
Collection <Integer> s = null;
for(Integer i : s) {
    if(i < 0)
        count++;
    if(count > k)
        System.exit(-1);

}