比较版本,字符串处理
javaclass 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;
}
}
合并区间
javaclass 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()][]);
}
}
峰值
要找到数组中的峰值元素,可以使用二分查找算法。由于峰值元素的定义是其值严格大于左右相邻值的元素,我们可以利用这个特性来缩小搜索范围。
javaclass 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 许可协议。转载请注明出处!