leetcode刷题笔记 1. 两数之和(Java语言实现)

两数之和

  1. 题目描述

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
    你可以按任意顺序返回答案。

  2. 示例
    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解法一

  1. 暴力解法

遍历数组当遇到nums[i]+nums[j]==target时,返回下标 i,j;

	public static int [] twoSum(int []nums,int target)
{
	for(int i =0;i<nums.length;i++) {
		for(int j = i+1;j<nums.length;j++) {
			return new int[] {i,j};
			
		}
	}
	return nums;
	
}

解法二

1. *ArrayList解法

同样是暴力查找,利用Java中Arraylist中的Contains()、IndexOf()等方法来实现。

import java.util.ArrayList;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<nums.length;i++){
            if(list(nums[i])){
                res[0]=list.indexOf(nums[i]);
                res[1]=i;
            }
            list.add(target-nums[i]);
        }
        return res;
    }
}

2. 常用ArrayList方法总结

1、构建ArrayList

1.不初始化起容量

ArrayList al = new ArrayList();//默认容量为0,当数组容量满时数组会自动一当前数组容量的2倍扩容

2.初始化容量

ArrayList al = new ArrayList(3);//初始容量为3

3.以一个集合或## 标题数组初始化

ArrayList al = new ArrayList(a);//a为集合或数组

2、添加元素

1.//.add(object value)

ArrayList al = new ArrayList();
al.add(“a”);

2.将元素插入到索引处(不过其有一定的限制性,必须在数组长度以内插入数组)

al.insert(int index,object value);

3、删除元素

al.Remove(object obj);//移除数组中的obj元素

al.RemoveAt(int index);//移除索引为index的数字元素

al.RemoveRange(int indext,int count);//移除从索引index开始,移除count个元素

4、查找元素

1、Contains()

//boolean contains(Object o)
al.Contains(object obj);//查找数组中是否有obj元素,返回类型为boolean存在返回true;

2、IndexOf()

//int indexOf(Object o)
al.IndexOf(object obj)
;//从0开始查找obj元素,只第一个obj元素,并返回起在数组中的位置,如果不存在,返回-1;

al.IndexOf(object obj, int startIndex);
//从startIndex开始查找obj元素,只第一个obj元素,并返回起在数组中的位置,

al.IndexOf(object obj, int startIndex, int count);
//从startIndex开始想后查找count个元素,如果存在obj元素,则返回其在数组中的位置

解法三

HashMap解法

import java.util.HashMap;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(nums[i])){
                res[0]=map.get(nums[i]);
                res[1]=i;
            }
            map.put(target-nums[i], i);
        }
        return res;
    }
}

.

使用的HashMap方法

1.if(map.containsKey(nums[i]))

containsKey(Object key)检测该映射中是否存在指定key的映射,有则返回true;没有则返回false

containsValue(Object value)检测该映射中是否存在指定value的映射,有则返回true;没有则返回false

2、map.put(target-nums[i], i);

put(K key, V value) 将键(key)/值(value)映射存放到Map集合中,利用put()方法去添加元素时,元素的key不能重复,如果重复,则一定覆盖原先的value值

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值