Describe a O(nlgn)-time algorithm that,given a set S of n integers and another integer x,determines whether or not there exist two elements in S whose sum is exactly x.
类似于TwoSum类的问题,这里只是让返回是否存在二者之和恰好是x。只需要经过排序,然后采用对撞指针的方法来实现判断。
public static boolean TwoSum(int []arr,int target) throws Exception { if (arr==null||arr.length==0){ throw new Exception("数组异常"); } int i=1; int j=arr.length; MergeSort(arr,i-1,j-1); while (i<j){ if (arr[i]+arr[j]==target){ return true; }else if (arr[i]+arr[j]<target) { i++; }else { j--; } } return false; } public static void MergeSort(int []arr,int start,int end){ int mid=start+(end-start)/2; MergeSort(arr,start,mid); MergeSort(arr,mid+1,end); merge(arr,start,mid,end); } private static void merge(int[] arr, int start, int mid, int end) { int [] help=new int[arr.length]; int p=start; int q=mid+1; int i=0; while(p<=mid&&q<=end){ help[i++]=arr[p]<arr[q]?arr[p++]:arr[q++]; } if (p<=mid){ help[i++]=arr[p++]; } if (q<=end){ help[i++]=arr[q++]; } for (int j=0;j<arr.length;j++){ arr[j]=help[j]; } }

本文介绍了一种解决两数之和问题的O(nlgn)时间复杂度算法。通过先对整数数组进行归并排序,再使用双指针技巧来判断是否存在两个数的和等于目标值x。该算法适用于寻找特定和的有效解决方案。
4036

被折叠的 条评论
为什么被折叠?



