搜索
写经验 领红包

数组的面试题(面试关于数组的算法题)

导语:面试题库-数组类n-Sum之2-Sum

n-sum问题,是面试常考的问题。其中最简单的two-sum问题,也是leetcode(力扣)的第一道题。

简单说就是给一个数组和一个目标数t,找出n个元素和为t。

首先说最简单的two-sum。

先把方法定义出来:

两个元素的下标用数组返回, int[] twoSum(int[] a, int target)

第一想法:

两层for循环,if(a[i] + a[j]) == t, 返回下标。时间复杂度O(n^2), 显然这题不是让你写这样的算法。

第二想法:

看看能否一趟算法搞定。

一趟算法中,在下标i往前行进(i++)的过程中,我们能拿到a[i],我们要找的另一个值是t-a[i].

加速查找问题的方法最简单的就有两个:1 二分搜索(O(logn)); 2用HashMap(O(1)),

所以在不考虑空间复杂度的情况下,使用HashMap: 显然查找所用的key是具体的值,要找的value是下标,所以每拿到一个a[i],put(a[i], i) get(t-a[i]) 能get到就搞定了。

调整下顺序得到下列代码:

int[] twoSum(int[] a, int t) {  Map<Integer, Integer> map = new HashMap<>();  int[] res = new int[2];  for (int i = 0; i < a.length; i++) {    if(map.get(t-a[i]) != null) {      int[0] = map.get(t-a[i]);      int[1] = i;    } else {      map.put(a[i], i);    }    return res;  }        

本文内容由小梓整理编辑!