【JAVA】每日两道算法题0909_Hash、链表

什么时候考虑用哈希法:
当我们需要快速查找一个元素是否出现集合里时。

牺牲空间换取时间的做法, 需要额外的数组、set、map来存放数据。

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

哈希表

哈希函数

哈希碰撞

  • 拉链法
  • 线性探测法

常见的三种哈希结构

当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。

  • 数组
  • set (集合)
  • map(映射)

二叉搜索数(有序排列树)和红黑树

链表

链表相比数组,物理存储上非连续。但有灵活的内存管理,允许在链表任意位置上插入和删除节点

leetcode题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

单向链表:

  • 单向链表结构
public class ListNode {
	int val;
	ListNode Next;
	ListNode(int x) {val = x;}
	}

在这里插入图片描述

  • 单链表可以没有头结点(哑节点),但有了头结点后,对在第一个元素结点前插入结点和删除第一个结点,其操作与对其它结点的操作统一了。
  • 链表中第一个节点的存储位置为头指针。(指针是一个变量,其值为另一个变量的地址)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值