LeetCode-1 Two Sum
来源:互联网 发布:阿里云客服一个月工资 编辑:程序博客网 时间:2024/05/22 11:42
本题,首先想到的是用蛮力法解决,也就是遍历两边数组,时间复杂度为O(n^2)
C++代码如下:
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>::iterator begin,end; int i,j; for(i=0,begin=nums.begin();begin!=nums.end();begin++,i++) for(j=i+1,end=begin+1;end!=nums.end();end++,j++) { if((*begin+*end == target)) goto result; } result: vector<int> returnVal; returnVal.push_back(i); returnVal.push_back(j); return returnVal; }};
但是在OJ上会超时,原因是时间复杂度太高了,因此可以采取空间换时间的方法,利用哈希散列达到目的。
JAVA代码如下:
public class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { map.put(nums[i], i); } for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement) && map.get(complement) != i) { return new int[] { i, map.get(complement) }; } } throw new IllegalArgumentException("No two sum solution"); }}
另外还有一种做法是先对数组进行从小到大的排序(一般默认为快速排序)。然后从首尾同时开始遍历,若首尾加和大于目标值,则尾部向前挪;若首尾加和小于目标值,则首部向后挪,这个做法的时间复杂度为O(n)。所以总体算法的时间复杂度为O(nlogn)。
0 0
- LeetCode 1 - Two Sum
- leetcode 1 Two Sum
- Leetcode【1】:Two Sum
- [leetcode 1] Two Sum
- 【leetcode-1】Two Sum
- [leetcode 1] Two Sum
- [Leetcode] 1 - Two Sum
- LeetCode (1) Two Sum
- LeetCode 1:《Two Sum》
- LeetCode | #1 Two Sum
- leetcode-1 Two Sum
- Two Sum | LeetCode(1)
- [Leetcode]1Two Sum
- leetcode 1 Two Sum
- leetcode #1 Two Sum
- leetcode 1:Two Sum
- LeetCode 1 Two Sum
- leetcode #1 two sum
- linux常用命令
- delete和delete[]的区别
- 异构智能CEO吴韧:真正的AI是为了让生活更简单
- android开发命名规范
- windows下mongodb安装与使用整理
- LeetCode-1 Two Sum
- ReactNative Demo - NavigationView 使用
- 集合框架五(hashCode 与Collections)
- Android开发 二级筛选,常见的省市筛选问题
- 大端小端模式(俗称大尾小尾模式)
- HDOJ--2098分拆素数和
- Glide
- UVA 11044-Searching for Nessy
- Leetcode 374. Guess Number Higher or Lower (Easy) (cpp)