1. 题目原址
https://leetcode.com/problems/two-sum/
2. 题目描述
3. 题目大意
给定一个数组,和一个目标值,返回数组中哪两个数的和等于目标值,返回这两个数的下标
4. 解题思路
- 利用【位图】来解题,时间复杂度O(n)
- 定义一个位图数组,数组的长度是 2047
- 每次循环都得到当前值与目标值的差值 different
- 同时每个值都放到对应位图上面,位图的下标对应nums数组的值,位图的值对应nums数组的下标
- 用差值 different去找位图对应位置是否有值,如果有就说明找到了符合条件的两个数
5. AC代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int t=2048;
int bitMode=t-1;
int[] temp=new int[t];
int length=nums.length;
int firstValue=nums[0];
for(int i=1;i<length;i++){
int different=target-nums[i];
int current=nums[i];
if(different==firstValue) {
return new int[] {0,i};
}
int differentIndex=temp[different&bitMode];
if(differentIndex!=0){
return new int[] {differentIndex,i};
}
int currentIndex=current&bitMode;
temp[currentIndex]=i;
}
return new int[2];
}
}
6. 相似题型
【1】 1. Two Sum 题目原址:https://leetcode.com/problems/two-sum/
【2】 15. 3Sum 题目原址: https://leetcode.com/problems/3sum/
【3】 18. 4Sum 题目原址: https://leetcode.com/problems/4sum/
【4】167. Two Sum II - Input array is sorted 题目原址: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
【5】 560. Subarray Sum Equals K 题目原址:https://leetcode.com/problems/subarray-sum-equals-k/
【6】 653. Two Sum IV - Input is a BST 题目原址:https://leetcode.com/problems/two-sum-iv-input-is-a-bst/
【7】 16. 3Sum Closest 题目原址: https://leetcode.com/problems/3sum-closest/