用java设计一个算法

有一个整数顺序表,设计一个尽可能高效的算法将所有负整数的元素移动到其他元素的前面。

基于Monster 组和GPT的调写:

  • 用双指针的方式来解决这个问题。具体的做法是,使用两个指针i和j分别指向数组的开头和结尾。然后,向中间移动指针,如果i指向的元素是负数,j指向的元素是非负数,就交换这两个元素的位置。如果i指向的元素是非负数,就继续向右移动i指针;如果j指向的元素是负数,就继续向左移动j指针。直到i和j相遇为止,这个算法的时间复杂度是O(n),其中n是数组的长度。

public static void moveNegativeNumbers(int[] nums) {
    int i = 0, j = nums.length - 1;
    while (i < j) {
        if (nums[i] < 0 && nums[j] >= 0) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            i++;
            j--;
        } else if (nums[i] >= 0) {
            i++;
        } else if (nums[j] < 0) {
            j--;
        }
    }
}