題目two num
題意:給定一個整數數組和一個目標值,要求在數組中找到兩個數,使得它們的和相加等於目標值,並且返回兩個數的下標
思路:1.如果使用暴力,時間複雜度爲O(n^2)
2.可以先將所有數進行排序,從最大值和最小值開始匹配再根據和目標值的比較移動,知道找到結果,時間複雜度爲O(nlog(n))
知識點:comparable 接口的使用,利用其進行對象的自然排序,相關文章
public class Solution {
static class Node implements Comparable<Node>{
int val,index;
public Node(int v,int i){
val = v;
index = i;
}
public int compareTo(Node o){
return this.val - o.val;
}
}
public int[] twoSum(int[] numbers,int target){
int[] xy = new int[2];
Node[] nodes = new Node[numbers.length];
for(int i = 0;i < numbers.length;i++){
nodes[i] = new Node(numbers[i],i+1);
}
Arrays.sort(nodes);
int i = 0,j = numbers.length-1;
while(i < j){
if(nodes[i].val+nodes[j].val == target){
break;
}
else if(nodes[i].val+nodes[j].val < target)
i++;
else
j--;
}
xy[0] = nodes[i].index <= nodes[j].index ? nodes[i].index : nodes[j].index;
xy[1] = nodes[i].index > nodes[j].index?nodes[i].index:nodes[j].index;
return xy;
}
}