
leetcode
文章平均质量分 71
xiayto
这个作者很懒,什么都没留下…
展开
-
【数据结构算法】前缀和
一、前缀和算法简介前缀和就是一个数组前N个数只和,利用前N个数和数组作为辅助数据解题。二、例题此类题目比较简单,一般如果不要求记录具体位置坐标还可以构造字典,降低时间复杂度,不过构造时要注意边界条件,如一开始要把0加进字典里面。1、leetcode 560【解题思路】求前缀和的字典,因为不需要知道具体位置,然后对数组求和,每到一个位置前N个之和sum与目标值k对比,相减就是需要的数据,再去字段中寻找改数字的数量。【解题代码】class Solution(object): def su原创 2021-05-19 02:40:57 · 398 阅读 · 0 评论 -
【基础算法】差分数组
一、算法简介差分其实就是数据之间的差,什么数据的差呢?就是上面所给的原始数组的相邻元素之间的差值,我们令 d[i]=a[i+1]-a[i],一遍for循环即可将差分数组求出来。其实差分数组是一个辅助数组,从侧面来表示给定某一数组的变化,一般用来对数组进行区间修改的操作。二、相关例题此类题目比较简单,只需要注意边界的位置即可。1. leetcode 1094【解题思路】遍历trips数组构造差分数组,trip的开始处增加该站上的人数,同时在trip的结束处减去相应的人数。【代码】class S原创 2021-05-17 22:38:20 · 439 阅读 · 0 评论 -
背包问题及其变体(Java)
背包问题:最经典的0-1背包背包问题是有一个一定容量的背包,然后有一堆物品,这些物品有一定的重量,要求在不超过背包容量的情况下,装最多的重量的问题。背包问题的变体背包问题有很多的变体,主要有以下几个:物品不仅仅有重量还会对应不同的价值,求价值最高,而不是重量最高每个物品有无限个而不是只有一个不是求最大重量,而是求达到重量的组合的个数背包问题的解法:背包问题是用动态规划的方法解...原创 2019-07-26 15:51:25 · 795 阅读 · 0 评论 -
归并排序练习题(Java)
1、算法原理:首先归并排序的基本是将两个数组合并,将两个有序的数组合并为一个有序的数组,需要一个额外的辅助数组,例如a、b数组,合并为cc[0] 是 a[0] 和 b[0] 中较小的数,假设是a[0],然后a数组的指针加1 变为a[1]c[1] 是 a[1] 和 b[0] 中较小的数,如此类推这样进行一次合并时间复杂度是O(n)归并排序的思想是,将整个数组2等分地无限拆分为每组只有1...原创 2019-07-25 01:52:19 · 851 阅读 · 0 评论 -
leetcode--高级数据结构
基础知识:Trie树(字典树)利用字符串的公共前缀来减少储存空间和查询时间。数据结构:#define TRIE_MAX_CHAR_NUM 26struct TrieNode{ TrieNode *child[TRIE_MAX_CHAR_NUM]; bool is_end; TrieNode() : is_end(false){ ...原创 2018-02-25 16:06:18 · 324 阅读 · 0 评论 -
leetcode--哈希表和字符串
基础知识单链表解决冲突:单链表结构:struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL){}};通过求余的操作找到对应的哈希表,然后用头插法进行链表储存。单链哈希表的基本操作://哈希的映射方程int hash_func(i...原创 2018-02-25 16:05:52 · 349 阅读 · 0 评论 -
leetcode--搜索
内容一些关于深度优先搜索和宽度优先搜索的综合题leetcode题目200. Number of Islands题意:1代表陆地,0代表水域,找图中岛屿的数量。解题思路:方法一:深度优先搜索 方法二:广度优先搜索DFS代码://写DFS函数,写出方向数组进行递归,递归时判断递归条件//1是否越界 2点是否为1且mask为0void ...原创 2018-02-25 16:05:10 · 471 阅读 · 0 评论 -
leetcode--动态规划
基础知识:动态规划: 1、确认原问题和子问题 2、确认状态 3、确认边界条件 4、确认转移方程leetcode题目70. Climbing Stairs题意:每次可以上1阶和2阶,上n阶楼梯,有多少中可能的情况。解题思路:最暴力的做法是递归,时间复杂度O(2^n)会超时:class Solution {public: int c原创 2018-01-21 02:58:44 · 374 阅读 · 0 评论 -
leetcode--链表
基本操作链表基本结构:struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};新建节点: ListNode new_list(0);或p=(ListNode *)malloc(sizeof(ListNode *)); 头插法建立链表:ListN原创 2017-10-28 05:27:07 · 363 阅读 · 0 评论 -
leetcode--二分查找和二分排序
基础知识二分查找(递归)代码#include <vector>using namesape std;bool binary_search(vector<int> &sort_array,int begin, int end, int target){ if(begin>end){ return false; } int mid=(begin+end)/2;原创 2017-12-22 18:58:11 · 374 阅读 · 0 评论 -
leetcode--二叉树和图
基础知识二叉树的数据结构struct TreeNode{ int val; //数据域 TreeNode *left //左右指针 TreeNode *right TreeNode(int x):val(x),left(NULL),right(NULL){} //构造函数}构造二叉树构造如下的一棵二叉树: int main(){ TreeNod原创 2017-12-10 17:33:56 · 613 阅读 · 0 评论 -
leetcode--递归、回溯和分治
基本概念leetcode题目78. Subsets题意:给出一个数列,求出这个数列所有子集解题思路:用递归解决,设计思路: 数据结构: 一个vector<int> item存储集合 一个vector<vector<int>>result 存储结果 递归程序: generate(i,nums,item,result) 递归程序含义:nums[i]前所有元素+nums[i]后所有元素组成的原创 2017-11-06 02:26:10 · 829 阅读 · 0 评论 -
leetcode--栈和队列
基本操作:STL stack#include <stack> S.top():取出栈顶 S.empty():判断栈是否为空 S.push(x):将x压入栈中 S.pop():弹出栈顶 S.size():栈的存储元素个数STL queue#include <queue> Q.empty():判断队列是否为空 Q.front():返回队列的头部元素 Q.back():返回队列的尾部元素原创 2017-10-29 17:03:49 · 708 阅读 · 0 评论