相关疑难解决方法(0)

将数字插入已排序的数字数组的有效方法?

我有一个已排序的JavaScript数组,并希望在数组中再插入一个项目,以便生成的数组保持排序状态.我当然可以实现一个简单的快速插入式插入功能:

var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
  array.splice(locationOf(element, array) + 1, 0, element);
  return array;
}

function locationOf(element, array, start, end) {
  start = start || 0;
  end = end || array.length;
  var pivot = parseInt(start + (end - start) / 2, 10);
  if (end-start <= 1 || array[pivot] === element) return pivot;
  if (array[pivot] < element) {
    return locationOf(element, array, pivot, end);
  } else {
    return locationOf(element, array, start, pivot);
  }
}

console.log(insert(element, …
Run Code Online (Sandbox Code Playgroud)

javascript sorting algorithm

124
推荐指数
9
解决办法
8万
查看次数

92
推荐指数
7
解决办法
10万
查看次数

是否比Java中的乘法和除法更快地移位?.净?

如果您恰好使用2的幂,则左右移位显然比大多数甚至所有CPU上的乘法和除法运算更快.但是,它可能会降低某些读取器和某些算法的代码清晰度.位移对于性能是否真的是必要的,或者我可以期望编译器或VM注意到这种情况并对其进行优化(特别是当2的幂是文字时)?我主要对Java和.NET行为感兴趣,但欢迎深入了解其他语言实现.

.net c# java optimization bit-manipulation

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

什么">>>"在java中意味着什么?

我发现此代码在SO帖子中找到重复项.但我不明白这条线的含义int mid = (low + high) >>> 1;

private static int findDuplicate(int[] array) {
        int low = 0;
        int high = array.length - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            System.out.println(mid);
            int midVal = array[mid];

            if (midVal == mid)
                low = mid + 1;
            else
                high = mid - 1;
        }
        return high;
    }
Run Code Online (Sandbox Code Playgroud)

java arrays primitive

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

为什么1 >> 32 == 1?

我想知道这可能是一个JVM错误吗?

java版"1.6.0_0"OpenJDK运行时环境(IcedTea6 1.4.1)(6b14-1.4.1-0ubuntu13)OpenJDK 64位服务器VM(内置14.0-b08,混合模式)

class Tmp {
    public static void main(String[] args) {
        System.out.println("1>>1 = "+(1>>1));
        System.out.println("1>>2 = "+(1>>2));
        System.out.println("1>>31 = "+(1>>31));
        System.out.println("1>>32 = "+(1>>32));
        System.out.println("1>>33 = "+(1>>33));
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时产生这个:

1>>1 = 0
1>>2 = 0
1>>31 = 0
1>>32 = 1 <---------- should be 0 i think
1>>33 = 0
Run Code Online (Sandbox Code Playgroud)

对于任何32的倍数,我也得到相同的结果.

我需要写自己的右移检查这个吗?

java bit-manipulation

30
推荐指数
2
解决办法
3347
查看次数

运营商>>>在Java和JavaScript之间有什么区别?

JavaScript代码:

alert( -123456 >>> 0 ); // Prints 4294843840
Run Code Online (Sandbox Code Playgroud)

Java代码:

System.out.println( -123456 >>> 0 ); // Prints -123456
Run Code Online (Sandbox Code Playgroud)

为什么?我已阅读文档,但我没有发现差异.如何将JavaScript代码移植到Java?

javascript java operators

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

Java中无符号右移运算符">>>"的目的是什么?

我理解Java中的无符号右移运算符">>>",但为什么我们需要它,为什么我们不需要相应的无符号左移运算符?

java programming-languages bit-manipulation

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

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

Java:对负数进行右移

关于负数的右移操作我很困惑,这里是代码.

int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));
Run Code Online (Sandbox Code Playgroud)

结果是:

11111111111111111111111111110001
11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

为什么要将负数移31而不是1(符号位)?

java bit-manipulation bit-shift bitwise-operators negative-number

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

Java的>>对比>>>运营商?

我没有Java参考书,我很难找到谷歌的答案.

Java中的">>"和">>>"运算符有什么区别?

int value = 0x0100;

int result = (value >> 8);
System.out.println("(value >> 8) = " + result);  // Prints: "(value >> 8) = 1"

result = (value >>> 8);
System.out.println("(value >>> 8) = " + result); // Prints: "(value >>> 8) = 1"
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation operators

17
推荐指数
5
解决办法
5701
查看次数