首页 > 其他分享 >力扣刷题——day1

力扣刷题——day1

时间:2023-01-09 20:13:46浏览次数:38  
标签:hash hashmap int 函数 day1 力扣 key new 刷题

1、两数之和

一下就能想到暴力解法,就是一个两个遍历。

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

可以改进的点。可以直接返回一个新建的数组。

return new int[]{i,j};   hashmap
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> FindTwoSum = new HashMap<>();
        for(int i = 0;i<nums.length;i++){
            if(FindTwoSum.containsKey(target - nums[i])){
                return new int[]{FindTwoSum.get(target - nums[i]),i};
            }else
            {
                FindTwoSum.put(nums[i],i);
            }
        }
        return new int[0];
    }
}

hashmap的解题思想很简单。注意一下hashmap的构建和查找就可以。了解一下hashmap

 

首先了解一下hash:

看了一些hash的浅显讲解,大意就是散列。将一个输入,利用写好的一个函数(hash)函数,对它做变换,得到一个固定长度的输出(key)。

目的:1、可以减少存储空间的占用,输出的大小是固定的。而且尽可能保证各个key出现的概率均匀。不同的输入通过这个H()函数的变换是有可能产生一样的key。尽量编写合适的hash函数来减少这个概率。(抗碰撞能力)

2、加密储存。hash的过程是不可逆的,就算你知道输出值,但是你没有办法得到输入。用于储存密码。而且输入稍微一改动,输出的hash值也会产生很大变化(抗篡改能力)

 

散列表(hash)

key key的存储地址之间(hashcode)的隐射关系。散列函数hash ,hash(key)= addre

冲突:key 不一样,隐射的add是相同的。冲突的解决。

 

hash构造——定义域要包括所有key,hash计算的address要尽可能等概率均匀的分布在地址空间中,尽量简单(减少计算开销)

1、直接定地址法。hash(key)= aKey + b

2、除留余数法。取不大于表长m的最大质数p,hash(key) = key %p

 

 

标签:hash,hashmap,int,函数,day1,力扣,key,new,刷题
From: https://www.cnblogs.com/joy-chen35/p/17038400.html

相关文章

  • android开发day1
    开发环境搭建创建项目安装虚拟环境发布程序日志过滤日志信息的几种方法过滤去筛选设置日志等级,搜索标签可能遇到的问题需要开启虚拟化练习题APP开发......
  • [2185] LeetCode 刷题笔记: 统计包含给定前缀的字符串 [s]
    [2185]LeetCode刷题笔记:统计包含给定前缀的字符串[s]目录[2185]LeetCode刷题笔记:统计包含给定前缀的字符串[s]题目描述题解参考简单模拟复杂度分析参考题解C/C++......
  • [1] LeetCode 刷题笔记: 两数之和 [S]
    [1]LeetCode刷题笔记:两数之和[S]目录[1]LeetCode刷题笔记:两数之和[S]题目描述题解参考暴力枚举复杂度分析使用哈希表复杂度分析参考题解C/C++的相关参考Rust......
  • day1算法练习
    题目https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以......
  • 力扣刷题思路
    1.常看Discussion。我相信很多同学为了刷题量,解开一道题后会迫不及待地点开下一道题。更为甚者,很多同学把刷题的数量作为衡量水平的绝对标准,比如「老师,我在Leetcode刷......
  • 力扣每日一题2023.1.8---2185. 统计包含给定前缀的字符串
    最近力扣好像经常鸽,感觉得找点时间补一补了,毕竟算法现在学的还是太辣鸡了。 给你一个字符串数组words和一个字符串pref。返回words中以pref作为前缀的字符串......
  • 算法刷题 Day 11 | 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰
    20.有效的括号讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。大家先自己思考一下有哪些不匹配的场景,在看视频我讲的都有哪些场景,落实到代码其实就容易......
  • 牛客进阶刷题10:整数倍数据位宽转换8to16
    比非整数倍简单`timescale1ns/1nsmodulewidth_8to16( input clk , input rst_n , input valid_in , input [7:0] data_in ,......
  • 牛客进阶刷题9:非整数倍数据位宽转换8to12
    输入位宽8bit,输出位宽12bit,也就是说每三个输入数据可以生成两个完整输出。注意给出的波形是data_lock而不是data_in,这是陷阱。data_lock是data_in打了一拍的结果。用一......
  • 力扣 35.搜索插入位置 58.最后一个单词的长度(java)
    这是刷题的第2天  第一反应是java有没有提供相应的方法,网上搜了后,用了binarySearch。他这个方法用的也是二分查找,符合题目的时间复杂度,但我一直在想如果数组元素重复......