小编pan*_*kaj的帖子

最近谷歌采访按位操作拼图

这是谷歌最近的采访问题:

我们将f(X,Y)定义为X和Y的二进制表示中的不同对应位的数量.例如,f(2,7)= 2,因为2和7的二进制表示分别是010和111.第一和第三位不同,因此f(2,7)= 2.

你得到一个N正整数的数组,A1,A2,...,AN.求所有对(i,j)的f(Ai,Aj)之和,使得1≤i,j≤N

例如:

A = [1,3,5]

我们回来

f(1,1)+ f(1,3)+ f(1,5)+ f(3,1)+ f(3,3)+ f(3,5)+ f(5,1)+ f (5,3)+ f(5,5)=

0 + 1 + 1 + 1 + 0 + 2 + 1 + 2 + 0 = 8

我能想到这个解决方案是O(n ^ 2)

int numSetBits(unsigned int A) {
    int count  = 0;

    while(A != 0) {
        A = A & (A-1);
        count++;
    }

    return count;
}

int count_diff_bits(int a, int b)
{
    int x = a ^ b;

    return numSetBits(x);
} …
Run Code Online (Sandbox Code Playgroud)

algorithm bitwise-operators bitwise-xor

10
推荐指数
1
解决办法
1692
查看次数

Android Volley库:我们总是要重复Response.Listener和Response.ErrorListener

我最近开始在我的项目中使用Android Volley.大多数教程中提到的常见做法是以这种方式使用它:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
            url, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    // do something
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // do something.
                }
            });
Run Code Online (Sandbox Code Playgroud)

我的疑问是 - 我们是否必须在我们需要提出请求的任何地方重复此代码.我试图通过创建一个辅助类来放入一个共同的onResponse和onErrorResponse处理程序:

public class CustomJSONObjectRequest extends JsonObjectRequest {
    private BaseResource resource;
    private String queryId;
    private String paramArgs;

    public CustomJSONObjectRequest(int method, String url, JSONObject 
                               jsonRequest, 
                               Response.Listener<JSONObject> listener,
                               final Response.ErrorListener errorListener, 
                               final Context ctx,
                               final BaseResource baseResource) {
    super(method, url, jsonRequest,
            new Response.Listener<JSONObject>() { …
Run Code Online (Sandbox Code Playgroud)

android android-volley

7
推荐指数
1
解决办法
8630
查看次数

express-validator验证作为数组的参数

我正在使用express-validator来验证我的快速应用程序中的POST数据.我有一个表单,其中有一个选择,在用户可以选择多个选项:

<select name="category" multiple id="category">
    <option value="1">category 1 </option>
    .......
</select>
Run Code Online (Sandbox Code Playgroud)

如果我选择多个值,提交表单后的有效负载会显示此信息:

...&category=1&category=2&....
Run Code Online (Sandbox Code Playgroud)

现在,在我的Express应用程序中,我尝试像这样验证它:

req.checkBody('category', 'category cannot be empty').notEmpty();
Run Code Online (Sandbox Code Playgroud)

但是,即使我发送多个值后,我总是得到错误 - category cannot be empty.如果我打印我的变量req.body.category[0]- 我得到数据.但是,不知何故无法理解我需要将其传递给验证器的方式.

node.js express

7
推荐指数
2
解决办法
6901
查看次数

线程的等待队列在POSIX pthread互斥锁锁定和解锁中位于何处?

我正在通过REMZI的并发部分,而在通过互斥体部分时,对此感到困惑:

为了避免繁忙的等待,互斥体实现采用park()/ unpark()机制(在Sun OS上),该机制将等待线程与其线程ID放入队列中。稍后,pthread_mutex_unlock()它将从队列中删除一个线程,以便调度程序可以选择该线程。同样,Futex的实现(Linux上的互斥量实现)使用相同的机制。

  1. 我仍然不清楚队列在哪里。它是在运行进程的地址空间中还是在内核内部?

  2. 我对条件变量的另一个疑问。是pthread_cond_wait()pthread_cond_signal()使用普通信号和等待方法,还是使用它们的某些变体?

multithreading posix mutex pthreads condition-variable

4
推荐指数
1
解决办法
1679
查看次数

动态编程:使用括号使算术表达式的值最大化

这是前段时间问我的面试问题:

假设您得到一个表达式E = x1 y1 x2 y2 .... yn-1 xn。

其中Xi属于自然数,Yi属于{+,*}

您需要括号以使其最大化E的值?

我能够朝着动态编程的方向思考,并且可以将其与矩阵链乘法问题联系起来,但是一直坚持推导这一问题的确切递归关系。

而且,后续问题对我来说使情况复杂化:

让我们将Yi更改为{+,-,*,/},然后如何最大化E?现在在该集合中添加%运算符。然后如何最大化E?

关于如何解决并为此建立解决方案的解释会很棒。

algorithm dynamic-programming

3
推荐指数
1
解决办法
3937
查看次数