两数之和

题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

链接:https://leetcode-cn.com/problems/two-sum/

解法:

  • 方法一:暴力法

    1. var twoSum = function(nums, target) {
    2. for(let i=0,len=nums.length;i<len;i++){
    3. for(let j=i+1,len=nums.length;j<len;j++){
    4. if(nums[i]+nums[j]===target){
    5. return [i,j]
    6. }
    7. }
    8. }
    9. return []
    10. };
  • 方法二:indexof法

    1. var twoSum = function(nums, target) {
    2. for(let i=0;i<nums.length;i++){
    3. const restIndex=nums.indexOf(target-nums[i])
    4. if(restIndex!==-1 && restIndex!==i){
    5. return [i,restIndex]
    6. }
    7. }
    8. return []
    9. };
  • 方法三:哈希表

    1. var twoSum = function(nums, target) {
    2. const hashMap=new Map()
    3. for(const key in nums){
    4. const restIndex=target-nums[key]
    5. if(hashMap.has(restIndex)){
    6. return [key,hashMap.get(restIndex)]
    7. }else{
    8. hashMap.set(nums[key],key)
    9. }
    10. }
    11. return []
    12. };

    三数之和(TODO)

    题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    存在重复元素

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

    链接:https://leetcode-cn.com/problems/contains-duplicate/

    解法:

  • 方法一:sort+遍历

    1. var containsDuplicate = function(nums) {
    2. nums.sort((a,b)=>a-b)
    3. for(let i=0;i<nums.length;i++){
    4. if(nums[i]===nums[i+1]){
    5. return true
    6. }
    7. }
    8. return false
    9. };
  • 方法二:哈希表

    1. var containsDuplicate = function(nums) {
    2. const hashMap=new Map()
    3. for(const item of nums){
    4. if(hashMap.has(item)){
    5. return true
    6. }else{
    7. hashMap.set(item,1)
    8. }
    9. }
    10. return false
    11. };