【LeetCode】解析_167. Two Sum II - Input array is sorted

167. Two Sum II - Input array is sorted

難易度:Easy 

參考及出處網站:Leetcode

思路

這題和第一題 Two Sum 題目連結 有異曲同工之妙

My C# Solution 

花了幾分鐘先寫出來 可能有誤及解法沒有很好 先PO來鞭屍一下XD

 public static int[] TwoSum(int[] numbers, int target)
        {
            int[] targetNum = new int[2];
            for(int i = 0; i < numbers.Length-1; i++)
            {
                for(int j = i+1; j < numbers.Length; j++)
                {
                    if (numbers[i] + numbers[j] != target)
                    {
                        continue;
                    }
                    else
                    {
                        targetNum[0] = i+1;
                        targetNum[1] =j+1;
                        break;
                    }
                }
            }
            if (targetNum.Length != 2)
            {
                return new int[0];
            }         
            return targetNum;

        }

Result

來看看修正後的

 public static int[] TwoSum(int[] numbers, int target)
        {
            // 從左邊算的索引值;
            int left = 0;
            // 從右邊算 陣列最後的索引值;
            int right = numbers.Length - 1;
            // 最初的和最後的相加;
            // 如果加起來數字大於目標數字的話 代表最後一位太多,所以換成(當前索引值)前面那個值
            // 如果加起來數字小於目標數字的話 代表第一位太少一,所以換成(當前索引值)前面那個值
            while (numbers[left] + numbers[right] != target)
            {
                if (numbers[left] + numbers[right] > target)
                {
                    right--;
                }
                else
                {
                    left++;
                }
            }
            return new int[] { left + 1, right + 1 };
        }

Result:整個效能比剛才的好很多