二叉树
二叉树刷题合集,不权威
copy(自刷)
副本文件题目一
题目一
哈希表
哈希表哈希映射
面试题10.02变位词组
最长回文串
哈希映射不使用任何内建的哈希表库设计一个哈希映射
具体地说,你的设计应该包含以下的功能
put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。
示例:
MyHashMap hashMap = new MyHashMap();hashMap.put(1, 1);hashMap.put(2, 2);hashMap.get(1); // 返回 1hashMap.get(3); // 返回 -1 (未找到)hashMap.put(2, 1); // 更新已有的值hashMap.get(2); // 返回 1hashMap.remove(2); // 删除键为2的数据hashMap.get(2); // 返回 -1 (未找到)
实现一个 ...
链表(自刷)
链表两两交换链表中的节点
合并两个有序链表
两两交换链表中的节点
24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:12输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:12输入:head = []输出:[]示例 3:12输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100
思路定义一个虚拟头结点dummylisty,如果存在可以交换的节点,则按照题目要求把相应位置的节点插入到相应位置。
123456789101112131415161718192021222324class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode *dummyList =new ListNode(-1,head); dummyList->next ...
数组(自刷)
数组杨辉三角
加一
删除排序数组中的重复项
四数之和
杨辉三角118. 杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:
123456789输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]
代码123456789101112131415161718192021class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res; for(int i = 0; i < numRows; i++) { vector<int> row; row.resize(i+1); row[0] = ...
二分法(自刷)
二分法
二分法代码1234567891011121314151617181920212223242526272829303132333435363738// 二分查找(折半查找):对于已排序,若无序,需要先排序// 非递归int BinarySearch(vector<int> v, int value , int low, int high) { if (v.size() <= 0) { return -1; } while (low <= high) { int mid = low + (high - low) / 2; if (v[mid] == value) { return mid; } else if (v[mid] > value) { high = mid - 1; } else { low = mid + 1; } } return -1;}// 递归int BinarySearch2(ve ...
分治算法(自刷)
分治算法自刷
分治算法的核心思想分治算法的核心思想就是四个字,分而治之,也就是将原来的问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解. 看起来有点像递归,不过要知道分治算法是一种处理问题的思想,递归是一种编程技巧.看起来像是因为分治算法一般都比较适合用递归去实现
分治算法递归实现步骤1. 分解: 将原问题分解为一系列的子问题
2. 解决:递归地求解各个子问题,若子问题足够小,则直接求解。
3. 合并:将子问题的结果合并为原问题
53.最大子序和
53.最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
123输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。`进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
解题思路1. Post not found: 力扣自刷/动态规划2. Post not found: 力扣自刷/贪心算法3. 分治 ...
回溯
副本文件回溯17. 电话号码的字母组合
22. 括号生成
电话号码的字母组合17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:12输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
12345678910111213141516171819202122232425262728293031public: map<char, string> M = { {'2',"abc"},{'3 ...
动态规划(自刷)
题目列表最大上升子序和
最大子序和
最长回文子串
不同路径
最长回文子序列
正则表达式匹配
最大上升子序列和题目描述一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …,aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中序列和最大为18,为子序列(1, 3, 5, 9)的和. 你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)。
输入描述:12输入包含多组测试数据。每组测试数据由两行组成。第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到100 ...