刷题
文章平均质量分 87
王小闹儿
这个作者很懒,什么都没留下…
展开
-
leetcode刷题规划
LeetCode精华题目列表【刷题规划系列】 – TuringPlanet目录算法题到底在考察什么?题目列表ArrayStringLinked ListQueueStackAdvanced Data StructuresHashSet / HashTableTreeHeapGraph (Breadth-FS)Graph (Best-FS)Graph (DFS)Basic AlgorithmsBinary SearchBreadth-原创 2021-10-22 08:34:24 · 534 阅读 · 0 评论 -
leetcode——两数之和
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], t...原创 2021-10-11 08:27:31 · 103 阅读 · 0 评论 -
算法训练营(十)深度优先搜索、广度优先搜索的实现和特性(单词接龙II为高频面试题)
一、基本概念1.1 遍历搜索在树(图/状态集)中寻找特定结点1.1.1 DFS 代码模板——使用栈递归写法visited = set()def dfs(node, visited): if node in visited: # terminator # already visited return visited.add(node) # process current node here. ... ...原创 2021-03-17 01:26:11 · 244 阅读 · 0 评论 -
算法训练营(九)分治、回溯的实现和特性
一、基础1.1 递归状态树1.2 分治代码模板分治代码与递归代码模板的区别:多了一步将结果合并(merge)int divide_conquer(Problem* problem, int params) { // recursion terminator if (problem == nullptr) { process_result return return_result; } // process current problem subpr...原创 2021-03-12 08:32:33 · 160 阅读 · 0 评论 -
算法训练营(八)泛型递归、树的递归
一、基础递归思维要点1.不要人肉进行递归(最大误区) 2.找到最近最简方法,将其拆解成可重复解决的问题(重复子问题) 3.数学归纳法思维递归代码模板// C/C++void recursion(int level, int param) { // recursion terminator if (level > MAX_LEVEL) { // process result return ; } // pr...原创 2021-03-09 08:44:49 · 165 阅读 · 0 评论 -
算法训练营(七)树、二叉树、二叉搜索树的实现和特性
目录一、基础:二、习题2.1二叉树的中序遍历2.2二叉树的前序遍历2.3N 叉树的后序遍历2.4N 叉树的层序遍历一、基础:分门别类刷leetcode——二叉树和图(C++实现) 分门别类刷leetcode——二叉查找树(C++实现) 二叉树的构建、递归和非递归版本的三种遍历、层序遍历思考:树的面试题解法一般都是递归,为什么?答案:树的结构二、习题https://leetcode-cn.com/problems/binary-tre...原创 2021-03-05 08:46:36 · 136 阅读 · 2 评论 -
算法训练营(六)哈希表、映射、集合的实现与特性
精、面试解题思路1. 与面试官把题目过一遍 2. 找出最优解 3. 写代码 4. 测试样例阐述一、hash table哈希表(Hash table) ,也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作散列函数(Hash Function) ,存放记录的数组叫作哈希表(或散列表)。1.有效的字母异位词给定两个字符串 s ...原创 2021-03-02 08:51:51 · 140 阅读 · 2 评论 -
算法训练营(五) 堆、栈、队列、优先队列
实战中经常用到的是双端队列——deque。一、优先队列——priority queue1.1 基础知识1. 插入操作——O(1) 2. 取出操作——O(logN)——按照元素的优先级取出 3. 底层实现的数据结构较为复杂,可以由heap实现、也可以由bst(二叉搜索树)实现等1.2 预习题https://leetcode-cn.com/problems/valid-parentheses/ https://leetcode-cn.com/problems/...原创 2020-10-26 07:13:59 · 601 阅读 · 0 评论 -
算法训练营(四) 跳表
一、引——如何给链表加速?思想——空间换时间通过添加索引的方式来加速时间复杂度分析——O(logn)二、基本概念跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素现实中的跳表形态从图中可以看到, 跳跃表主要由以下部分构成:表...原创 2020-10-20 23:27:04 · 436 阅读 · 0 评论 -
算法训练营(三) 数组、链表基本实现和特性
一、数组1.1 基础概念底层硬件实现是通过内存管理器,内存开辟了一段连续的地址,每次访问时可以根据内存管理器进行访问,因此每次访问的时间复杂度为O(1)。因其中元素的物理地址与其下标之间满足这种线性关系,故亦称作线性数组(linear array)。1.2 vector模板类1.3 实战题目1. 盛最多水的容器给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个...原创 2020-10-18 22:23:17 · 875 阅读 · 0 评论 -
算法训练营(二) 复杂度分析、递归
算法效率的度量方法所谓算法,是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一个指令序列。在程序编写前,需要依据统计方法对算法进行估算。1.1 影响执行速度的因素 算法采用的策略方案 编译产生的代码质量 问题的输入规模 机器执行指令的速度 1.2 时间复杂度和空间复杂度基础概念:https://www.zhihu.com/question/21387264 写程序时需要分析时间和空间复杂度 掌握一两种编程工具,刻意练..原创 2020-10-18 13:54:25 · 650 阅读 · 0 评论 -
算法训练营(一)刷题步骤、脑图、技法
一、脑图二、刷题四件套1. 审题2. 找到可能解法,先普通,后深入。列出时间复杂度和空间复杂度3. 多coding4. 写一些测试用例进行测试原创 2020-10-17 09:26:34 · 1672 阅读 · 1 评论 -
leetcode 125 验证回文串
题目分类——字符串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false思路使用两根指针分别指向字符串的首位,两个指针运动方向相反,不断向字符串中心靠近,边运行边比较。知识点:1.C库函数int isalnum(intc...原创 2020-08-10 08:23:26 · 135 阅读 · 0 评论 -
牛客刷题输入输出总结
输入二维数组,以空格分隔 for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ cin>>matrix[i][j]; } }原创 2020-06-15 08:00:04 · 769 阅读 · 0 评论 -
分门别类刷leetcode——栈、队列、堆(C++实现)
leetcode 225 用队列实现栈使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back,peek/pop from front,size, 和is empty这些操作是合法的。 你所使用...原创 2019-01-20 14:08:18 · 399 阅读 · 0 评论 -
分门别类刷leetcode——图的宽度优先搜索(C++实现)
leetcode 200岛屿的个数——2018秋招竞技世界考过,2019春招竞技世界又考了一遍。。。给定一个由'1'(陆地)和'0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入...原创 2019-01-30 21:22:36 · 1394 阅读 · 0 评论 -
分门别类刷leetcode——二分查找与分治算法(C++实现)
基础复习——二分查找递归实现二分查找(递归和时间复杂度没有关系)bool binary_search(vector<int>&sort_array, int begin, int end, int target) { if (begin > end) return false; int mid = (begin + end) / 2; if (...原创 2019-01-23 19:09:48 · 721 阅读 · 0 评论 -
分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)
Trie树(字典树、前缀树)的基础知识字典树是一种有序的,用于统计、排序和存储字符串的数据结构,他与二叉查找树不同,关键字不是直接保存在节点中,而是由节点在树中的位置决定,每个节点代表了一个字符,从第一层孩子节点到中间的某个标记的节点代表了存储的字符串。一个节点的所有子孙都有相同的前缀,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的字符串,只有叶子节点和部分内部节点进...原创 2019-01-28 17:54:29 · 1669 阅读 · 0 评论 -
分门别类刷leetcode——递归和回溯搜索(C++实现)
回家了,复习不能停!!!加油!!! 基础复习回溯法leetcode 78子集给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路...原创 2019-01-22 18:31:32 · 651 阅读 · 0 评论 -
分门别类刷leetcode——二叉查找树(C++实现)
二叉查找树 基本概念 二叉查找树插入节点将某节点 (insert_node),插入至以node为根的二叉查找树中:1、如果 insert_node 节点值小于当前node节点值:如果node有左子树,则递归的将该节点插入至左子树为根的二叉查找树中 否则,将node->left赋值为该节点的地址2、大于等于时如果node有右子树,则递归的将该节点插入至右...原创 2019-01-27 20:44:17 · 920 阅读 · 0 评论 -
分门别类刷leetcode——难题
leetcode 315 计算右侧小于当前元素的个数——线段树+离散化给定一个整数数组nums,按要求返回一个新数组counts。数组counts有该性质:counts[i]的值是nums[i]右侧小于nums[i]的元素的数量。示例:输入: [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右...原创 2019-01-31 19:54:40 · 485 阅读 · 0 评论 -
分门别类刷leetcode——动态规划(C++实现)
leetcode 70爬楼梯假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶...原创 2019-01-26 18:22:51 · 797 阅读 · 0 评论 -
分门别类刷leetcode——贪心算法(C++实现)
leetcode 455分发饼干你想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj>= gi,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设...原创 2019-01-20 17:05:16 · 539 阅读 · 0 评论 -
分门别类刷leetcode——哈希表与字符串(C++实现)
复习哈希表使用哈希统计字符串中的字符个数#include<stdio.h>#include<string>int main(int argc, char *argv[]) { int char_map[128] = { 0 }; std::string str = "abcdefgaaxxy"; for (auto i : str...原创 2019-01-25 01:04:21 · 918 阅读 · 0 评论 -
来啃硬骨头——费波纳茨(Fibonacci)矩阵快速幂 c++
全文线索:解题引出费波纳茨——>费波纳茨递归解法——>费波纳茨动态规划解法——>矩阵快速幂解法——>补充一个费波纳茨的题一、来解题字符串只由'0'和'1'两种字符构成,当字符串长度为1时,所有可能的字符串为"0"、"1";当字符串长度为2时,所有可能的字符串为"00"、"01"、"10"、"11";当字符串长原创 2019-03-13 14:29:50 · 670 阅读 · 0 评论 -
一个很火的面试题
最近这道题见到好几次了,就记录一下吧思路先按位或,将数组中每个对应的位置标1。之后按位与,查找那个没被标为1的位置,就是缺失的数字了。时间复杂度O(n)。实现代码#include<iostream>#include<vector>using namespace std;void find_loser(vector<int>&a...原创 2019-02-28 11:10:23 · 408 阅读 · 0 评论 -
刷题(一)C++实现
题目一给定一个有序数组arr,代表数轴上从左到右有n个点arr[0]、arr[1]...arr[n-1],给定一个正数L,代表一根长度为L的绳子,求绳子最多能覆盖其中的几个点。考点: 二分 难度: 一面或者二面的第一题 思路:从左向右依次利用二分查找算法找到数组中每个位置 end 作为终点时,绳子L所能覆盖的最大距离(即第一个值大于等于value的点index与...原创 2019-02-26 15:35:30 · 1346 阅读 · 6 评论 -
2017年360最后一道编程题
A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方,经过谈判后,双方同意用一个公平的方式来处理这片金矿。处理的规则如下:他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?(两伙马贼均会采取对己方有利的策略)/*A、B两伙马贼意...原创 2018-04-03 15:42:36 · 197 阅读 · 0 评论 -
C++代码实现笔试必考选择题——根据先序和中序遍历结果计算后序遍历结果
假定一棵树的:先序遍历的结果为:1,2,3,4,5,6,; 中序遍历的结果为:3,2,4,1,6,5.在不建立二叉树的情况下,获得该二叉树的后续遍历结果(上火车之前写出来了,玩的就是心跳,哇塞)// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include<...原创 2019-04-19 12:50:37 · 721 阅读 · 0 评论 -
刷牛客编程题,变红名大佬(一)(水仙花数、删除链表倒数第n个节点、动态规划题)
目前还是小黄,加油刷,努力变成红名大佬 (2019.4.20)题目——水仙花数思路字符串处理+遍历实现代码:#include<iostream>#include<string>#include<vector>#include<math.h>#in...原创 2019-04-21 02:34:08 · 355 阅读 · 0 评论 -
网易面试真题+0413快手在线笔试题
网易真题输入0-10000的整数,将其转成大写。比如:21转成二十一。思路:将输入的int类型整数通过to_string()函数转成string。然后将字符串中的每一位依次与辅助数组中的元素进行匹配。对于0的处理(我当时忽略这块,然后凉了。。。),可以在遍历的过程中进行查看。如果当前遍历的元素是非0的,而前一个元素为0,说明此时在插入该元素之前,需要插入一个字符串“零”实现...原创 2019-04-13 14:43:54 · 381 阅读 · 0 评论 -
shell编程面试题
1、读取文件,输出包含某单词的各个行cat 文件名 | grep 需要查找的单词 >将结果重定向到该文件中或者这样也可以。直接用grep来获得结果2、统计文件中含某单词的行数使用参数——-c3、输出文件中不包含某单词的行使用参数——-v4、统计文件中不包含某单词的行的行数...原创 2019-04-07 14:01:16 · 2069 阅读 · 0 评论 -
刷题 牛客网—— SQL
启航!1.查找最晚入职员工的所有信息create table employees(emp_no int(11) not null,birth_date date not null,first_name varchar(14) not null,last_name varchar(16) not null,gender char(1) not null,...原创 2019-03-31 17:21:18 · 406 阅读 · 0 评论 -
刷题(四)C++实现
题目一设计一个有set all功能的哈希表——即调用set all方法,可以将所有的key设置成相同的value思路——打时间戳——时间复杂度O(1)设置一个myvalue类型,里面存放value值和一个时间戳(用于记录创建的时间)。使用hash表并向表中添加元素,key就是原始的hash表的key,value是myvalue(里面保存了value值和时间戳)。将一个哈希表和一...原创 2019-03-09 22:32:04 · 462 阅读 · 0 评论 -
刷题(五)C++
题目一字符串只由'0'和'1'两种字符构成,当字符串长度为1时,所有可能的字符串为"0"、"1";当字符串长度为2时,所有可能的字符串为"00"、"01"、"10"、"11";当字符串长度为3时,所有可能的字符串为"000"、"001"、"010"、"011"、"100"、"101"、"110"、"111"...如果某一个字符串中,只要是出现'0'的位置,左边就靠着'1',这样的字...原创 2019-04-22 23:34:03 · 733 阅读 · 0 评论 -
刷题(三)C++实现
题目一1、数组中,如果有一种数,出现次数大于一半,则打印该数。2、一个数组,数组长度为N。输入数字K,输出所有出现次数大于N/K的数。思路:第一题:从前向后遍历数组。设置两个变量,一个变量保存候选者cand,一个存该候选者的血量hp=0。如果当前hp=0,说明此时cand没有保存任何人,将当前遍历的人保存起来; 否则将当前元素与cand保存的元素进行比较 ...原创 2019-03-05 13:49:20 · 787 阅读 · 0 评论 -
刷题(二)C++实现
题目一给定一个数组arr,求差值为k的去重数字对。思路对于数组中的每个值,使用STL里面的find查找是否有与之差值为k的值存在,如果存在,则在用于标记的数组mark中将该数字的索引位置标为1.最后将每个索引位置被标为1的值存入set容器中进行去重。实现代码#include<iostream>#include<vector>#include&l...原创 2019-02-27 15:26:02 · 420 阅读 · 0 评论 -
网易2017秋招 回文序列
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入...原创 2018-02-20 21:31:26 · 281 阅读 · 0 评论 -
排序算法总结——c++实现
Java实现见链接:https://mp.weixin.qq.com/s/pN4RH4pPKtSkZJgcf2V-Vw 排序算法的稳定性分析 选择排序无法保证稳定性: 归并排序可以保证稳定性:(相等的就先放置左区域内的元素) 快速排序无法保持稳定性(因为partition的时候无法保持稳定性)以后补充 堆排序无法保证稳定性:...原创 2018-11-25 00:05:50 · 213 阅读 · 0 评论 -
分门别类刷leetcode——链表(C++实现)
链表结构struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};构建链表——尾插法ListNode * CreateNode(int n) { ListNode *head = NULL, *pnew = NULL, *ptail = ...原创 2018-10-27 23:18:54 · 381 阅读 · 0 评论