在1数组中,找到二数和为 X 的最有效率算法

在一数组中,找到二数和为 X 的最有效率算法
大牛们好,我在练习 leetcode,遇到它一题(https://leetcode.com/problems/two-sum/)是写说
输入:参数为一数组及二数之和
输出:二数的 index数组,二数均大於零,且小的在前面

目前我的代码如下,复雜度是 n^2 而出现了 Time Limit Exceeded 的不合格提示,想请问高手这该怎麽写比较好…

public class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int[] result= null;
        for(int i=0;i<numbers.length;i++){
        int num1 = numbers[i];
            for(int j=1; j<numbers.length; j++){
                int num2 = numbers[j];
                int sum = num1+num2;
                if(sum == target){
                    if(num2 >= num1){
                        return result = new int[] {i, j};
                    } else {
                        return result = new int[] {j, i};
                    }
                }
            }
        }
        return null;
    }
}


------解决思路----------------------
如果数组不是按照大小顺序排列的,那你这种做法没有什么问题,但是如果是排序的,则你的做法就是有问题的。

如果是排序的的话,则可以这样循环,外层循环所有,内层通过二分的办法查找,则复杂度是n*logn,比你这个性能好多了。
------解决思路----------------------
输入数组有序?O(nlgn)可以实现。先进行进行预处理,把大于x的数排除掉;然后,每次取一个数,总共执行n趟,用该数与x做差,二分查找,O(lgn)。二分查找时,左边界是当前数的下一个数值,这里可以节省运算。
如果无序,先排序,可以O(nlgn)完成,其他同有序。两次O(nlgn)从量级上会优于O(n^2)