21xrx.com
2024-09-20 00:44:00 Friday
登录
文章检索 我的文章 写文章
解决Java算法难题:从代码案例出发
2023-06-15 09:55:03 深夜i     --     --
Java算法 字符串压缩 数组去重 查找第K大的元素

Java是一门非常强大的编程语言,但Java算法问题可能会让许多开发人员感到困扰。在本文中,我们将探讨一些最常见的Java算法难题,并帮助您解决这些问题,提高程序的效率。

1. 压缩字符串

有时,对于性能要求比较高的应用程序,需要对大量数据进行压缩和解压缩处理。现在,我们将做一个字符串压缩的例子,即使在处理大量字符时也能快速高效地工作。


public static String compress(String s) {

  int count = 1;

  StringBuffer sb = new StringBuffer();

  for (int i = 1; i < s.length(); i++) {

    if (s.charAt(i) == s.charAt(i - 1)) {

      count++;

    } else {

      sb.append(s.charAt(i - 1)).append(count);

      count = 1;

    }

  }

  sb.append(s.charAt(s.length() - 1)).append(count);

  return sb.toString();

}

2. 数组去重

在Java中,使用Set集合可以很容易地去重。不过,我们也可以在处理大量数据时,使用更高效的算法,如下面的例子:


public static int[] removeDuplicates(int[] nums) {

  if (nums.length == 0)

    return nums;

  

  int prev = nums[0];

  int k = 1;

  for (int i = 1; i < nums.length; i++) {

    if (nums[i] != prev) {

      nums[k] = nums[i];

      prev = nums[i];

      k++;

    }

  }

  int[] result = new int[k];

  for (int i = 0; i < k; i++) {

    result[i] = nums[i];

  }

  return result;

}

3. 查找第K大的元素

查找数组中第K大的元素是一个常见的问题。接下来,我们将介绍一个常见的算法,该算法具有O(n)的时间复杂度:


public static int findKthLargest(int[] nums, int k) {

  int left = 0;

  int right = nums.length - 1;

  while (left <= right) {

    int pivotIndex = partition(nums, left, right);

    if (pivotIndex == nums.length - k) {

      return nums[pivotIndex];

    } else if (pivotIndex > nums.length - k)

      right = pivotIndex - 1;

     else {

      left = pivotIndex + 1;

    }

  }

  return -1;

}

private static int partition(int[] nums, int left, int right) {

  int pivot = nums[right];

  int i = left;

  for (int j = left; j < right; j++) {

    if (nums[j] <= pivot) {

      swap(nums, i, j);

      i++;

    }

  }

  swap(nums, i, right);

  return i;

}

private static void swap(int[] nums, int i, int j) {

  int temp = nums[i];

  nums[i] = nums[j];

  nums[j] = temp;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复