VVL1295

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第一题(TwoSum)

public class TwoSum_1 {
    public int[] twoSum(int[] nums, int target) {
        //二分法(暂时最快)
        int[] copy = Arrays.copyOf(nums, nums.length);
        int[] values = new int[2];
        int[] indexes = new int[2];
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            int temp = nums[i];
            //分段,是为了避免出现[3,2,4] 6的情况
            int index1 = Arrays.binarySearch(nums, 0, i, target - temp);
            int index2 = Arrays.binarySearch(nums, i+1, nums.length, target - temp);
            if(index1 > 0 || index2 > 0) {
                values[0] = temp;
                values[1] = target - temp;
            }
        }
        //为了避免出现[0,4,3,0] 0 的情况
        boolean ok1 = false;
        boolean ok2 = false;
        for (int i = 0; i < copy.length; i++) {
            if(ok1 && ok2) {
                break;
            }
            if(!ok1 && copy[i] == values[0]) {
                indexes[0] = i;
                ok1 = true;
            }
            if(!ok2 && copy[i] == values[1]){
                indexes[1] = i;
            }
        }
        Arrays.sort(indexes);
        return indexes;
        
        //直观简单的思路
//        for (int i = 0; i < nums.length; i++) {
//            if(i == (nums.length-1)) {
//                return null;
//            }
//            int temp1 = nums[i];
//            for(int j = i + 1; j < nums.length; j++) {
//                int temp2 = nums[j];
//                if(temp1 + temp2 == target) {
//                    int[] answers = {i, j};
//                    return answers;
//                }
//            }
//        }
//        return null;
    }
}

 

posted on 2016-04-14 09:59  bobo2018  阅读(153)  评论(0)    收藏  举报