✨ 两数相加
parent
86f126a372
commit
4aae3ec3f1
@ -0,0 +1,106 @@
|
||||
package org.alis.algorithm.leetcode;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 给定一个坐标 返回两个数据相加
|
||||
* 数组数据不重复
|
||||
*
|
||||
* @author lc
|
||||
* @date 2023/10/28 14:32
|
||||
*/
|
||||
public class LeetCode18 {
|
||||
|
||||
private final int[] ints = {3, 2, 1, 4};
|
||||
private final int target = 6;
|
||||
|
||||
public void exec() {
|
||||
// 基础版本
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
for (int j = 0; j < ints.length; j++) {
|
||||
if (target == ints[j] + ints[i]) {
|
||||
System.out.println("target 下标 是 " + i + ":" + j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int[] half(int[] array, int ta) {
|
||||
int courseOne = array.length / 2;
|
||||
// 先获取目标一半的数据
|
||||
int addOne = array[courseOne];
|
||||
while (true) {
|
||||
// 开始走计算
|
||||
if (addOne <= ta) {
|
||||
int i = ta - addOne;
|
||||
int search;
|
||||
if (i > addOne) {
|
||||
// 向上找
|
||||
search = search(i, array, courseOne, array.length);
|
||||
} else {
|
||||
// 向下找
|
||||
search = search(i, array, 0, courseOne);
|
||||
}
|
||||
if (search > -1 && search != courseOne) {
|
||||
return new int[]{courseOne, search};
|
||||
}
|
||||
}
|
||||
if (courseOne == 0) {
|
||||
courseOne = array.length - 1;
|
||||
} else {
|
||||
courseOne = courseOne / 2;
|
||||
}
|
||||
addOne = array[courseOne];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private int search(int i, int[] array, int start, int end) {
|
||||
int left = start;
|
||||
int right = end;
|
||||
|
||||
while (left <= right) { // 注意
|
||||
int mid = (right + left) / 2;
|
||||
// 避免边际查询
|
||||
if (mid < 0 || mid >= array.length) {
|
||||
return -1;
|
||||
}
|
||||
if (array[mid] == i)
|
||||
return mid;
|
||||
else if (array[mid] < i)
|
||||
left = mid + 1; // 注意
|
||||
else if (array[mid] > i)
|
||||
right = mid - 1; // 注意
|
||||
}
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
public int[] hash() {
|
||||
Map<Integer, Integer> map = new HashMap<>();
|
||||
// hashMap
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
int two = target - ints[i];
|
||||
if (map.containsKey(two)) {
|
||||
return new int[]{map.get(two), i};
|
||||
}
|
||||
map.put(ints[i], i);
|
||||
}
|
||||
return new int[]{};
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
LetCode letCode = new LetCode();
|
||||
letCode.hash();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue