• 167. Two Sum II


    一、题目

      1、审题

      

      2、分析

        给出一个升序的整形数组,当两个元素之和为 target ,输出这两个元素的下标。(只有一组符合的数)

    二、解答

      1、思路:

        方法一、

          采用两个指针,start 从前向后移动,end 从后向前移动;当 num[start] + num[end] = target 时,输出。

        public int[] twoSum2(int[] numbers, int target) {
            
            for (int i = 0, j = numbers.length - 1; i < j; ) {
                if(numbers[i] + numbers[j] == target)
                    return new int[]{1+i, 1+j};
                else if(numbers[i] + numbers[j] > target)
                    j--;
                else
                    i++;
            }
            
            return null;
        }

      方法二、

        遍历数组,以当前遍历的元素 num1 为假设的第一个符合的数,则 num2 = target - num1,采用二分查找在数组后续部分进行查找。

        public int[] twoSum3(int[] numbers, int target) {
            
            for (int i = 0; i < numbers.length; i++) {
                int start = i + 1;
                int end = numbers.length - 1;
                int tmp = target - numbers[i];
                while(start <= end) {
                    int mid = start + ((end - start) >> 1);
                    if(numbers[mid] == tmp) 
                        return new int[]{i + 1, mid + 1};
                    else if(numbers[mid] < tmp) 
                        start = mid + 1;
                    else
                        end = mid - 1;
                }
            }
            return null;
        }
  • 相关阅读:
    Web基础 网页的血肉CSS
    18
    19
    20
    17
    16
    15
    13
    14
    12
  • 原文地址:https://www.cnblogs.com/skillking/p/9795106.html
Copyright © 2020-2023  润新知