编辑
2024-05-10
算法题
00
请注意,本文编写于 365 天前,最后修改于 364 天前,其中某些信息可能已经过时。

比较版本,字符串处理

image.png

java
class Solution { public int compareVersion(String version1, String version2) { String[] v1 = version1.split("\\."); //按.分割 String[] v2 = version2.split("\\."); int len1 = v1.length; int len2 = v2.length; int maxLen = Math.max(len1, len2); //选出最大长度 for (int i = 0; i < maxLen; i++) { //开始比较 int num1 = i < len1 ? Integer.parseInt(v1[i]) : 0; int num2 = i < len2 ? Integer.parseInt(v2[i]) : 0; if (num1 != num2) { return num1 > num2 ? 1 : -1; } } return 0; } }

合并区间

image.png

java
class Solution { public int[][] merge(int[][] intervals) { if (intervals.length == 0) { return new int[0][2]; } // 按照区间的起始位置排序 Arrays.sort(intervals, (a, b) -> a[0] - b[0]); List<int[]> merged = new ArrayList<>(); for (int[] interval : intervals) { // 如果列表为空,或者当前区间的起始位置大于前一个区间的结束位置,直接添加 if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < interval[0]) { merged.add(interval); } else { // 否则,合并区间 merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], interval[1]); } } // 将List转换为数组 return merged.toArray(new int[merged.size()][]); } }

峰值

要找到数组中的峰值元素,可以使用二分查找算法。由于峰值元素的定义是其值严格大于左右相邻值的元素,我们可以利用这个特性来缩小搜索范围。

image.png

java
class Solution { public int findPeakElement(int[] nums) { int left = 0; int right = nums.length - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) { right = mid; } else { left = mid + 1; } } return left; // 或者 right,因为 left == right } }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!