算法数据结构
羡慕ACMer,希望有朝一日能像他们一样
nlgn
这个作者很懒,什么都没留下…
展开
-
【笔试】知识竞赛
知识竞赛_阿里巴巴笔试题_牛客网值域二分 + 后缀数组#include <bits/stdc++.h>using namespace std;#define NUM 200000struct Man{ int A, B; bool operator<(const Man& m) const { return A < m.A; }};int main() { int n; Man mans[NU原创 2022-02-20 20:11:32 · 765 阅读 · 1 评论 -
【笔试】朋友圈 并查集
并查集,最好写一个类,见 struct Uf ,可以看看并查集的使用和优化 - jyhzf - 博客园并查集主要三操作 Uf(构造函数初始化),find(找root节点,包含路径压缩), join(合并)路径压缩可以理解成减小树的深度,把当前结点的root结点设为更上层的root的结点还不是直接root结点,白话就是把我的老大 设为 我的老大的老大...本题注意去重,就是当某两个点的root一样时,就没必要在加数量了#include <bits/stdc++.h>us...原创 2022-02-19 16:52:59 · 317 阅读 · 0 评论 -
【笔试】合法连续子段
滑动窗口 + hash#include <bits/stdc++.h>using namespace std;int main() { unordered_map<int, int> mp; int n, m; long long ans = 0; scanf("%d%d", &n, &m); vector<int> nums(n); for(int i = 0; i < n; ++i) ..原创 2022-02-10 13:53:58 · 892 阅读 · 0 评论 -
【笔试】对称飞行器
题目链接BFS,就是设计一个结构体这个思路比较好#include <bits/stdc++.h>using namespace std;struct node { int x, y, step, count; node(int x_, int y_, int s_, int c_) : x(x_), y(y_), step(s_), count(c_) {}};vector<vector<int>> dir =原创 2022-02-09 17:18:09 · 334 阅读 · 0 评论 -
leetcode337. 打家劫舍 III(树状dp)
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。输入: [3,2,3,null,3,null,1] 3 / \ 2 3 \ \ 3...原创 2020-09-14 11:04:16 · 199 阅读 · 0 评论 -
leetcode1011.在 D 天内送达包裹的能力 值域二分
本题的二分和往常的二分的不太一样,我是做的了leetcode378. 有序矩阵中第K小的元素这个题才对这个题很快就有了思路。这个题分的是值域的的范围,我们把答案定一个范围,在这个范围内进行二分。本题中所求的运载能力值域最小是weights中的最大值,原因自己想,这个就是初始的左边界l。最大就是weights的所有值的和,这个就是初始的有边界r。ok现在在[l,r]二分就可以,计算当运载能力是mid的时候所需要天数day若day>D说明运载能力小了,l=mid+1 若d...原创 2020-08-01 20:31:38 · 178 阅读 · 0 评论 -
树状数组学习(leetcode 307)
树状数组树状数组解决的问题解决大部分基于区间上的更新以及求和问题。例如输入一个长度为n的数组,然后求某个区间的和447447原创 2020-07-07 13:51:10 · 319 阅读 · 0 评论 -
leetcode 首个共同祖先(递归)
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1/ \ / \6 2 0 8 / \7 4示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近...原创 2020-05-23 18:00:29 · 350 阅读 · 0 评论 -
leetcode93 复原IP地址(递归+回溯)
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]思路:递归+回溯首先确定递归的四个参数(原字符串s,保存当前ip的cur,所有可能ip集合ans,当前遍历到位置pos)递归出口:当cur里有四个数字,即包含当前ip的四个部分并且pos==s..原创 2020-05-22 00:22:52 · 384 阅读 · 0 评论 -
leetcode560.和为k的子数组(前缀和+map)
给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。这个题首先就是要注意数据范围,有可能是负数,所以滑动窗口肯定就不行。其次如果暴力做也能过,就是双重循环O(),但是要注意的是这种情况[0...原创 2020-05-17 02:55:35 · 219 阅读 · 0 评论 -
平衡二叉树
先来介绍一下平衡二叉树。两个条件:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1 它的左子树和右子树都是一颗平衡二叉树。 今天就先写如何判断是否平衡二叉树;判断算法也是基于以上两个条件,除了满足左右子树的高度之差不能大于1之外还要在判断左右子树是不是平衡二叉树。有这种情况:这是题目链接,https://leetcode-cn.com/problems/check-balance-lcci/,AC代码如下:class Solution {public: i.原创 2020-05-15 14:13:38 · 284 阅读 · 0 评论 -
UVA11609-Team---快速幂
闲扯,没想到阿里的笔试题居然直接抄了UVA--------------------------------分割线-----------------------------题目大意就是从n个人取任意数量(k)的人,在从这个k个人任挑一个队长,有多少中方案,队长不同,人不同都算不同的方案。这个题得有一种需要一些数学知识,如图最后结果就是 n* 2^(n-1)当然也可以这么想,先...原创 2020-03-24 23:19:38 · 268 阅读 · 0 评论 -
牛客--字符串分隔
连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入2次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组示例1输入abc123456789输出abc000001234567890000000这个题没什么难度,就是考查strin...原创 2020-03-04 23:02:12 · 218 阅读 · 0 评论 -
大整数相乘
大数相乘是面试中经常出现的一个题目,昨天做了一道大数相乘的题目,这里贴上题目链接:点击打开链接大数相乘的算法非常简单,就是用程序来模拟我们笔算。我们就来模拟算125*53 1 2 5 ===>x[] X 5 3===>y[] -------------- (3) (6)...原创 2018-03-16 16:05:08 · 317 阅读 · 0 评论 -
树的对称性
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。树的递归问题要优先考虑 根为NULL本题如果左子树的根和右子树的根都为NULL,返回1;若有一个子树根为NULL,返回0;判断 左右子树根结点是否相同;然后递归判断AC代码/*struct TreeNode { int val; struct Tre...原创 2019-03-27 20:01:01 · 460 阅读 · 0 评论 -
栈的弹出压入序列
这是原题连接https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking题目大意...原创 2019-01-19 11:51:32 · 207 阅读 · 0 评论 -
leetcode 872. Leaf-Similar Trees
题目大意就是判断两棵树的叶子序列是否一样,要考虑顺序。样例:For example, in the given tree above, the leaf value sequence is (6, 7, 4, 9, 8).思路:别想复杂了,就是求出每棵树的叶子序列,然后比较就可以了。求叶子序列我用的是 中序遍历。AC代码:/** * Definition for a...原创 2018-12-10 20:31:54 · 204 阅读 · 0 评论 -
贪心经典例题讲解
本文在写作过程中参考了大量资料,不能一一列举,还请见谅。贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般步骤是:1.建立数学模型来描述问题;2...转载 2018-03-24 00:02:29 · 1515 阅读 · 0 评论 -
leetcode.31—Next Permutation
本题大意就是求下一个比原排列大的全排列。例如:1,2,3有6种排列方式(按从小到大的顺序){(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)}根据这个表,123的下一个全排列是1321,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1本题思路就是从后往前找,直到找到一个元素b,比它的前一个元素要大(我们把它的前一个元素记a)。...原创 2018-03-24 17:18:41 · 117 阅读 · 0 评论 -
回溯之Leetcode 40——Combination Sum II
本题和39Combination Sum 极为相似,建议做这个题之前先把Combination Sum 做了。以下讲解是在做过Combination—Sum的基础上。 II的题目要求不变,唯一变化了的是允许已知序列中有重复的元素和序列中的一个元素只能用一次。依然用回溯法,递归中嵌套循环。很容想到将I中代码中的递归语句: dfs(ans,candidates,a,tag-candidates[i],...原创 2018-03-31 20:11:38 · 159 阅读 · 0 评论 -
回溯之Leetcode79——Word Search
初看这题,以为这题是逃迷宫那种题,但是后来发现还是有点差别的。这里贴出走迷宫这道题链接:Lost in maze继续来说这道题,本题判断在一个字符矩阵中,是否可以找出由相邻的元素组成的target字符串。For example,Given board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]word = ...原创 2018-03-26 17:13:51 · 178 阅读 · 0 评论 -
回溯之Leetcode39——Combination Sum
本题大意就是在一个数字序列里找出相加和为target的几个数,序列的每个数可以重复使用For example, given candidate set [2, 3, 6, 7] and target 7, A solution set is: [ [7], [2, 2, 3]]这道题我们依然使用回溯法解决问题,要求我们枚举嘛~~~我们先给待查找数组排序(后面我会说明排序的原因)我们设一个...原创 2018-03-27 16:23:09 · 112 阅读 · 0 评论 -
Leetcode714.Best Time to Buy and Sell Stock with Transaction Feed动态规划
虽然不是自己想出来的,还是做个总结吧,一个比较简单的动态规划。题目大意就是,选择合适的时间买卖股票让利润最大。这个题可以用动态规划解决。每一天结束,两个状态,要么有股票,要么没有股票。所以我们用两个变量,cash表示当天结束手里没有股票的最大利润,hold表示当天结束手上有股票最大利润。那么初值就是cash=0;hold=-prices[0];那么状态是如何转移的呢?如果当天结束手上没股票,cas...原创 2018-04-16 20:31:30 · 137 阅读 · 0 评论 -
01背包经典例题详解
转载自点击打开链接首先01背包题目的雏形是有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放。其状态转移方程是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}对于这方方程其实并不难理解,方程之中,现在需要放置的是第i件物...转载 2018-04-22 11:24:37 · 4850 阅读 · 0 评论 -
python实现快排
先上代码吧,算法的描述以后有时间了在写def quick_sort(l,r,args): if(l<r): i=l j=r base=args[l] while(i<j): while(args[j]>=base and (i<j)): j=j-1...原创 2018-07-12 20:30:54 · 749 阅读 · 0 评论 -
leetcode 238 Product of Array Except Self
这个题没啥知识点,就是思路问题,还是笨啊。。。题目大意就是返回一个数组,数组里的每个元素等于原来数组除了对应的索引的元素之外的所有元素的乘积Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all t...原创 2018-11-01 00:01:17 · 128 阅读 · 0 评论 -
Leetcode 442 Find All Duplicates in an Array
数组题发现都是考思路的啊,知识点倒没啥。题目大意就事给一个长度为n的数组,数组的元素值域是[1,n],并且这些每个数存在不超过两次,要求找出出现次数为2的元素。Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twiceand others appear once.Fin...原创 2018-11-01 14:04:43 · 137 阅读 · 0 评论 -
Leetcode451 Sort Characters By Frequency
Given a string, sort it in decreasing order based on the frequency of characters.Example 1:Input:"tree"Output:"eert"本题就是要把字符串里的数字按频率降序输出。注意题目中说,频率相同的字母顺序随便排都是合理答案。一看次数,直接想到哈希表,所以我用了map...原创 2018-11-06 18:38:44 · 194 阅读 · 0 评论 -
Leetcode865. Smallest Subtree with all the Deepest Nodes
感觉树的题都挺难的,因为要写递归吧。。感觉自己一直不会写递归。闲话少说言归正传Given a binary tree rooted at root, the depth of each node is the shortest distance to the root.A node is deepest if it has the largest depth possible among a...原创 2018-11-11 22:40:41 · 213 阅读 · 0 评论 -
树的遍历
树大致有四种遍历方式:前序遍历,中序遍历,后序遍历,层次遍历一、前序遍历遍历的顺序是根->左孩子->右孩子递归方式void preOrder(TreeNode* root) { if (!root) { return; } cout << root->val; preOrder(root->le...原创 2018-11-17 13:12:11 · 174 阅读 · 0 评论 -
leetcode 769. Max Chunks To Make Sorted
leetcode 769. Max Chunks To Make Sorted题目大意就是一个数组分块,每一块排序后,在拼接起来后的数组是 将原来数组升序排序的结果。如果理解起来有点困难,看样例就会明白。我把这个块叫 独立块,(个人理解)Example 1:Input: arr = [4,3,2,1,0]Output: 1Explanation:Splitting into t...原创 2018-12-09 20:07:08 · 150 阅读 · 0 评论 -
回溯之Leetcode22 Generate Parentheses
本题大意就是求n个括号的全排列。这是题目链接:leetcode.22方法就是一一枚举,用回溯来实现。有关回溯文章“回溯详解“讲的很详细,可以看看。用left和right来表示左括号剩余的个数和右括号剩余的个数。如果left>right,说明括号不匹配,直接return。如果left==0&&right==0,说明找出一种排列。其余则分别添‘(’和‘)’递归。详见AC代码:cl...原创 2018-03-19 21:30:25 · 161 阅读 · 0 评论