您的位置:首页 > 其它

Two Sum

2014-03-28 23:17 190 查看
源代码:

import java.util.Arrays;
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] results = new int[2];
int len = numbers.length;
Node[] nodes = new Node[len];
for (int i = 0; i < len; i++) {
nodes[i] = new Node(i + 1, numbers[i]);
}
/*
Node tempNode = null;

for (int i = 0; i < len; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (nodes[j].value > nodes[j + 1].value) {
tempNode = nodes[j];
nodes[j] = nodes[j + 1];
nodes[j + 1] = tempNode;
}
}
}
*/
Arrays.sort(nodes);

int key = -1, index = -1;
for (int i = 0; i < len; i++) {
key = target - nodes[i].value;
index = binarySearch(nodes, key);
if (index != -1 && i != index) {
if (nodes[i].index < nodes[index].index) {
results = new int[] { nodes[i].index, nodes[index].index };
} else {
results = new int[] { nodes[index].index, nodes[i].index };
}
return results;
}
}

return results;
}

public int binarySearch(Node[] nodes, int key) {
int left = 0, right = nodes.length - 1, mid = (left + right) >> 1;

while (left <= right) {
mid = (left + right) >> 1;
if (nodes[mid].value == key) {
return mid;
} else if (nodes[mid].value > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}

class Node implements Comparable<Node>{
int index;
int value;

public Node() {
}

public Node(int index, int value) {
this.index = index;
this.value = value;
}
@Override
public int compareTo(Node node) {

if (this == node) {
return 0;
}
return this.value - node.value;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: