小编Bor*_*jev的帖子

如何计算最接近中位数的k?

我有一个n个成对不同元素的数组和一个数字k,其中1 <= k <= n.

现在我正在寻找一种算法,计算k数字与数字数组的中位数的最小绝对差值.我需要线性复杂度(O(n)).

我的方法:

我找到了中位数:

  • 我把数字排序
  • 我得到了中间元素,或者如果元素的数量为id,那么中间和圆形中的两个元素的平均值.

之后:

  • 我拿每个数字,找到距离中位数的绝对距离.这些结果我保存在不同的数组中
  • 我对新获得的数组进行排序.
  • 我取结果数组的前k个元素,我就完成了.

我不知道我的解决方案是否存在O(n),我是否对这个想法是对的.有人可以验证吗?有人能告诉我如何在O(n)中解决它吗?

arrays algorithm median

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

用gson解析JSON数组

我无法解析我从javascript获得的JSON.JSON的格式是这样的:

[{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]},{"positions":[{"x":210,"y":50},{"x":242,"y":50},{"x":274,"y":50}]}]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够做到这一点:

{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]}
Run Code Online (Sandbox Code Playgroud)

但我现在还需要创建一个具有这些职位的课程.我一直在上课,因为我先尝试打印输出,但我无法进一步分解.我收到此错误消息:

java.lang.IllegalStateException:这不是JSON数组.

我的代码是这样的:

    JsonParser parser = new JsonParser();
    String ships = request.getParameter("JSONships");
    JsonArray array = parser.parse(ships).getAsJsonArray();

    System.out.println(array.get(0).toString());
    JsonArray array2 = parser.parse(array.get(0).toString()).getAsJsonArray();
    System.out.println(array2.get(0).toString());
Run Code Online (Sandbox Code Playgroud)

我也试过这样做:

    Gson gson = new Gson() ;
    String lol = (gson.fromJson(array.get(0), String.class));
    System.out.println(lol);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的STRING但是BEGIN_OBJECT

最后,我想循环遍历位置,为每个"位置"创建类,其中包含具有另一个类Position的List,其具有int x,y.

感谢您的时间.

java arrays json gson

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

对于非常接近零的值,双重计算运行速度要慢得多

朋友要求我分享过去一段时间我偶然发现的事情.原帖是从这里获取的.问题陈述可以在这里找到.基本上是算法竞赛的网站.

我被解决了使用以下代码解决的算法问题:

double dp[80002][50];
class FoxListeningToMusic {
public:
    vector <double> getProbabilities(vector <int> length, int T)  {    
        memset(dp, 0, sizeof(dp));
        int n = length.size();
        for(int i = 0; i < n; i++)
            dp[0][i] = 1.0 / (double)n;

        double mul = 1.0 / (double)n;
        int idx ;
        for(int i = 1; i <= T; i++) {
            for(int j = 0; j < n; j++)  {
                idx = i - length[j];
                if(idx >= 0)  {
                    for(int k = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm floating-point performance

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

以全屏模式从 WebView 打开图像

如果 webview html 内容几乎没有<img>标签,当用户在 webview 中点击图像时,是否可以在新活动中以全屏模式打开该图像?

android android-webview

2
推荐指数
1
解决办法
1465
查看次数

无法在intellijIDEA中找到JDK x64

我正在开始一个新项目,客户要求我们在IntelliJIdea中工作.我安装它并尝试进行ant构建.它转变为我需要64位jdk进行构建.所以我安装了它.现在,我需要在IntelliJIdea中配置它.这是我得到的信息:

未配置运行此ANT目标所需的JDK(1.6_x64).请更新项目中的设置 图书馆菜单.

有人可以帮我找到这个Project | Libraries menu菜单吗?

java configuration intellij-idea

2
推荐指数
1
解决办法
3720
查看次数

删除xml文件的缩进

我正在编写一个我将用于单元测试的函数.我想比较XML文件,但由于其中一个将由第三方库创建,我想减轻由于不同缩进而导致的任何可能的差异.因此我写了以下函数:

private String normalizeXML(String xmlString) {
    String res = xmlString.replaceAll("[ \t]+", " ");
    // leading whitespaces are inconsistent in the resulting xmls.
    res = res.replaceAll("^\\s+", "");
    return res.trim();
}
Run Code Online (Sandbox Code Playgroud)

但是,此函数不会删除XML每行的前导间隔.

当我以这种方式编写函数时(第一个正则表达式的差异):

private String normalizeXMLs(String xmlString) {
    String res = xmlString.replaceAll("\\s+", " ");
    // leading whitespaces are inconsistent in the resulting xmls.
    res = res.replaceAll("^\\s+", "");
    return res.trim();
}
Run Code Online (Sandbox Code Playgroud)

它确实删除了尾随的空格,但它也使xml显示为单行,当您需要比较差异时,这非常麻烦.

我无法证明为什么第一个实现不会取代前导间隔.有任何想法吗?

编辑:更有趣的是,如果我进行单行操作:

String res = xmlString.replaceAll("^\\s+", "");
Run Code Online (Sandbox Code Playgroud)

此行不会删除任何标识!

java regex removing-whitespace

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

如何在c ++中确定字符串中的字符

我有一个名为"String"的变量,可能具有以下值:

const char* String = "/v1/AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1/test/DSC_0188.JPG";
Run Code Online (Sandbox Code Playgroud)

要么

const char* String = "/auth/v1.0";
Run Code Online (Sandbox Code Playgroud)

要么

const char* String = "/v2/AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1/images?limit=1000&delimiter=/&format=xml";
Run Code Online (Sandbox Code Playgroud)

现在我想确定"String"是否包含字符'v1'.检查这一点必须准确.我试着用,和strchr,但它并不需要"V1"为一个字符是不是很准确,这需要相当的"V"和"1"为两个单独的字符.而且我不能使用namepace std和library string,我只能使用"string.h".在这些限制内,如何准确检查变量"String"是否具有字符"v1"?

谢谢.

c c++

0
推荐指数
1
解决办法
90
查看次数