前言
刷 LeetCode 的时候,发现有种算法:动态规划(Dynamic Programming),查阅了资料,简单梳理一下动态规划是啥?
HashMap | HashSet |
---|---|
实现了 Map 接口 | 实现了 Set 接口 |
储存键值对,不允许重现重复的键(key) | 仅仅存储对象,不允许集合中出现重复元素 |
使用 public Object put(Object Key,Object value) 方法将元素放入map中 |
使用 public boolean add(Object o) 方法将元素放入set 中,如果元素值重复返回 false,添加成功返回 true |
使用键对象来计算 hashcode 值 | 使用成员对象来计算 hashcode 值,对于两个对象来说 hashcode可 能相同,所以 equals() 方法用来判断对象的相等性,如果两个对象不同的话,那么返回false |
比较快,因为是使用唯一的键来获取对象 | HashSet 较 HashMap 来说比较慢 |
题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
示例 1:
输入:head = [4,5,1,9], val = 5
输出:[4,1,9]
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:
输入:head = [4,5,1,9], val = 1
输出:[4,5,9]
解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.说明:
- 题目保证链表中节点的值互不相同
- 若使用 C 或 C++ 语言,你不需要
free
或delete
被删除的节点
1 | /** |
题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。
1 | public class Solution { |