随笔分类 - 算法
摘要:三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出
阅读全文
摘要:3. 字符串转换整数 描述 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还
阅读全文
摘要:无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字
阅读全文
摘要:颠倒字符串中的单词 给你一个字符串 s ,颠倒字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回单词 顺序颠倒 且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的
阅读全文
摘要:丑数 描述 如果一个数只有质数因子2,3,5 ,那么这个数是一个丑数。我们可以认为 1 也是一个丑数。 样例 输入:9 输出:10 题解1: 动态规划 class Solution { public int nthUglyNumber(int n) { int a = 2, b = 3, c = 5
阅读全文
摘要:LRU缓存 描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返
阅读全文
摘要:插入、删除和随机访问都是 O(1) 的容器 描述 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构: insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false 。 remove(val):当元素 val 存在时返回 true ,并
阅读全文
摘要:数据流中第一个独特的数 II 描述 我们需要实现一个叫 DataStream 的数据结构。并且这里有两个方法需要实现: void add(number) // 加一个新的数 int firstUnique() // 返回第一个独特的数 你可以假设在调用 firstUnique 方法时,数据流中至少有
阅读全文
摘要:数据流中第一个唯一的数字 描述 给一个连续的数据流,写一个函数返回终止数字到达时的第一个唯一数字(包括终止数字),如果找不到这个终止数字, 返回 -1 示例1 输入: [1, 2, 2, 1, 3, 4, 4, 5, 6] 5 输出: 3 示例2 输入: [1, 2, 2, 1, 3, 4, 4,
阅读全文
摘要:重哈希 计算:-4 % 3 = 2 对于一个除式来说,余数是唯一大于0小于除数的一个数。-4% 3要用到同余式,也就是找个和-4同余的整数: 通俗点就是-4加除数3,要是还是负的就再加3,直到出现第一个正数为止,这个正数就是余数2 描述 哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(
阅读全文
摘要:哈希函数 描述 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值 33,假设任何字符串都是基于 33 的一个大整数,比如: hashcode*("abcd") =(ascii
阅读全文
摘要:TSP旅行商——NP问题 NP问题:时间复杂度是以n为底的多项式,如O(N2), O(N3), 统称Np问题, 也可以说只能由暴力搜索解决的问题。 非NP问题:时间复杂度是非多项式,如O(log2n) 题目描述: 给 n 个城市**(从 1 到 n)**,城市和无向道路成本之间的关系为3元组 [A,
阅读全文
摘要:N皇后 **n 皇后问题** 是一个典型的NP问题,研究的是如何将 `n` 个皇后放置在 `n×n` 的棋盘上,并且使皇后彼此之间不能相互攻击。这里介绍一种简单,又相对时间复杂度低的DFS。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 示例: 输入:4 返回值:2 示例: 输入:
阅读全文
摘要:算法题 一、链表 1. 反转链表 如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示: 示例: 输入:{1,2,3} 返回值:{3,2,1} 代码: public class Solution { public ListNode
阅读全文
摘要:全零子串的数量 题目:全零子串的数量 给出一个只包含0或1的字符串str,请返回这个字符串中全为0的子字符串的个数 1<=|str|<=30000 示例: 输入:"00010011" 输出:9 解释: "0"子字符串有5个, "00"子字符串有3个, "000"子字符串有1个。 所以返回9 代码:
阅读全文
摘要:滑动串口求和 题目:滑动窗口内数的和 给你一个大小为n的整型数组和一个大小为k的滑动窗口,将滑动窗口从头移到尾,输出从开始到结束每一个时刻滑动窗口内的数的和。 示例: 输入:array = [1,2,7,8,5], k = 3 输出:[10,17,20] 解析: 1 + 2 + 7 = 10 2 +
阅读全文
摘要:数组中的第K个最大元素 题目:数组中的第K个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例: 输入: [
阅读全文
摘要:归并排序 class Solution2 { public int[] sortArray(int[] nums) { if (nums == null || nums.length == 0) return nums; int[] temp = new int[nums.length]; merg
阅读全文
摘要:快速排序 class Solution { public int[] sortArray(int[] nums) { if(nums==null || nums.length==0) return nums; quickSort(nums, 0, nums.length-1); return num
阅读全文
摘要:两数之和 题目:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 : 输入:
阅读全文