概述
1、散列表方式
public void findBathIndex(int[] arr,int k){
if(arr==null){
return;
}
Hashtable<Integer,Integer> map=new Hashtable<Integer,Integer>();
for(int i=0;i<arr.length;i++){
map.put(arr[i], i);
}
int i=0;
for(i=0;i<=arr.length/2;i++){
if(map.get(k-arr[i])!=null&&map.get(k-arr[i])!=i){
System.out.println(i+" "+map.get(k-arr[i]));
break;
}
}
if(i==arr.length/2+1){
System.out.println("不存在");
}
}
2、排序后查找
/**
* 每次start与end相加:
* 若大于k,则end--
* 若小于k,则start++
*
*/
public static void find(int[] array,int sum){
Arrays.sort(array);
int i=0;
int j=array.length-1;
while(i<j){
int sumTemp=array[i]+array[j];
if(sumTemp==sum){
System.out.println(i+":"+j);
return;
}else if(sumTemp>sum){
j--;
}else{
i++;
}
}
System.out.println("不存在");
}
3、遍历
给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度
空间复杂度和时间复杂度均为 O(n)
- O(n2)
public int[] getTwo1(int[] nums, int target) {
int[] result = new int[2];
for (int i = 0; i < nums.length; i++) {
int a = nums[i];
for (int j = nums.length - 1; j >= 0; j--) {
int b = nums[j];
if ((a + b) == target) {
result = new int[]{i, j};
}
}
}
return result;
}
- O(n)
public int[] twoSum(int[] nums, int target) {
if(nums==null || nums.length<2)
return new int[]{0,0};
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0; i<nums.length; i++){
if(map.containsKey(nums[i])){
return new int[]{map.get(nums[i]), i};
}else{
map.put(target-nums[i], i);
}
}
return new int[]{0,0};
}
最后
以上就是如意电脑为你收集整理的数组系列—数组两数和的下标的全部内容,希望文章能够帮你解决数组系列—数组两数和的下标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复