leetcode刷题笔记

1. 两数之和

题解很棒,最好能说明一下为什么不怕重复造成hash冲突(重复值只能存入一个)。 在这里记录一下: 

1.每次写入时,判断条件为 key和 tag 之间的差值存不存在。

2.题目命题说明了一点,假定只有一个解。也就是说重复元素再多都无所谓。 case 1:如果有3个或者以上的重复元素,代表这个重复元素不可能是解,所以写入map的时候直接覆盖也无所谓; case2:如果只有两个重复元素,同样的道理,假如这个重复元素是解,那么必定是两个重复元素的和等于tag。这种情况下,当遇到第二个重复元素时,不会写入map,这个时候直接已经取到解了。 所以这种方式,不用考虑hash冲突的问题。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i< nums.length; i++) {
            if(map.containsKey(target - nums[i])) {
                return new int[] {map.get(target-nums[i]),i};
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

map.containsKey  map.put  

throw new IllegalArgumentException

面试题03. 数组中重复的数字

知识点:创建hashmap        Map<Integer, Integer> map=new HashMap<>();

put函数 containsKey函数的使用  key key key 我的神!

运用HashMap,将数组中的数一一存入,同时比较是否map中存在,已存在的话就输出,不存在则存入map中并赋给初始值1.

class Solution {
    public int findRepeatNumber(int[] nums) {
        int n=nums.length;
        int result=0;
        Map<Integer, Integer> map=new HashMap<>();
        for(int i=0;i<n;i++){
            if(map.containsKey(nums[i])){
                result=nums[i];
            }else{
                map.put(nums[i],i);
            }
        }
        return result;
    }
}

面试题05. 替换空格

知识点:java中字符串数组转换为String字符串

字符串数组长度s.length(),加括号,而数组长度不用加括号

        char[] array=new char[length*3];

            String newstr=new String(array,0,size);

由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。

获得 s 的长度 length
创建字符数组 array,其长度为 length * 3
初始化 size 为 0,size 表示替换后的字符串的长度
从左到右遍历字符串 s
获得 s 的当前字符 c
如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1
遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串

            String newstr=new String(array,0,size);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习推荐算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值