- 博客(136)
- 收藏
- 关注
原创 Hive3安装
Hive3安装Mysql安装卸载Centos7自带的mariadb[root@node3 ~]# rpm -qa|grep mariadbmariadb-libs-5.5.64-1.el7.x86_64[root@node3 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps[root@node3 ~]# rpm -qa|grep mariadb [root@node3 ~]#
2021-12-31 15:10:45 1262
原创 hadoop配置
Hadoop3.3.0–Linux编译安装基础环境:Centos 7.7编译环境软件安装目录mkdir -p /export/server一、Hadoop编译安装(选做)可以直接使用课程提供已经编译好的安装包。安装编译相关的依赖yum install gcc gcc-c++ make autoconf automake libtool curl lzo-devel zlib-devel openssl openssl-devel ncurses-devel snappy snapp
2021-12-30 14:13:34 263
原创 java泛型设计
泛型设计目的省去运行时期类型检查的麻烦,在编译期即可解决比如:ArrayList files = new ArrayList();. . .String filename = (String) files.get(0);或者add 操作等显示包含的类型需要很多强制转化的地方最好用泛型类型检查的工作全部交给了编译器unchecked warning对于兼容以前的类型,比如Dictory可以使用Dictionary<Integer, Components> labelT
2021-12-17 20:52:57 732
原创 泛型类不允许创建为数组
泛型类不允许申明为数组的原因在于:如果可行的话,以下语法可以通过Pair table=new Pair[10]Object[] objArray=tableobjArray[0]=new Pair1.类型擦除会将原本定义的 String擦除掉2.我们将新的类转化为Object[]3.Object只检查是不是Pair类,并不会检查是否符合要求,因为此时已经发生了类型擦除,编译器也不能知道以前T的信息...
2021-11-27 09:58:45 357
原创 Lambda表达式理解
实现:public class LambdaTest { @FunctionalInterface interface IMath{ int operation(int a, int b); } int testLambda(IMath lambdaTest, int a , int b) { return lambdaTest.operation(a,b); } public static void ma
2021-11-23 16:31:48 196
原创 struct类型理解
struct之前碰到过坑现在理解起来其实就是填充表格表格宽度为目前最长的数据类型的值然后依次从上往下填充,看一共用了几行即可struct stu{ char a; char c; int b;};int main() { cout<<sizeof(stu)<<endl; return 0;}int最宽,占用4个结果是8charcharintintintintstruct stu{
2021-08-07 16:20:00 188
原创 Redis持久化机制
也是服气,面试经常问一些看似很深奥的东西,弄一大堆高深词汇忽悠人,其实策略很容易想明白,真正高深的就是大学基础课RDB也就是创建一个子进程,当达到某种触发条件时候将内存中的内容写入文件这种触发条件可以说当前内存的记录达到多少条执行写入指令客户端退出AOF以日志形式记录所有写操作...
2021-07-24 13:10:07 79
原创 springboot报错 org.apache.ibatis.binding.BindingException
原因在于我的配置文件写成了mapper-locations: classpath:mybatis.mapper/*.xml但是这里面 . 并不会解析成路径的一部分,正确的写法应该是mapper-locations: classpath:mybatis/mapper/*.xml
2021-06-13 23:22:40 215
原创 LeetCode 309股票问题,待冷冻期
class Solution {public: int maxProfit(vector<int>& prices) { int n = prices.size(); vector<vector<int>> dp(n, vector<int>(5)); dp[0][4] = -prices[0]; dp[0][0] = -prices[0]; for (int .
2021-04-26 13:47:51 73
原创 最小表示法
引理如果比较起始位置i ii和起始位置j jj发现s [ i , i + 1 … i + k − 1 ] = s [ j , j + 1 … j + k − 1 ] s[i,i+1\ldots i+k-1]=s[j,j+1\ldots j+k-1]s[i,i+1…i+k−1]=s[j,j+1…j+k−1]且s [ i + k ] < s [ j + k ] s[i+k]<s[j+k]s[i+k]<s[j+k]则起始位置j , j + 1 … j + k j,j+1\ldots j+kj.
2021-04-19 11:04:00 127
原创 计算器
收藏一份模板观察观察lass Solution {public: unordered_map<char,int> oper_pri = { {'+',1}, {'-',1}, {'*',2}, {'/',2}, {'%',2}, {'^',3} }; stack<char> opers; stack<
2021-04-04 21:45:13 78
原创 滑动窗口自定义标准化流程
右侧添加元素判断左侧是否收缩更新窗口最大(或最小)长度右指针+1class Solution {public: int lengthOfLongestSubstring(string s) { //滑动窗口,区间[left,right] int left = 0; int right = 0; unordered_map<char, int> mmap; int maxlen = 0; .
2021-03-25 20:57:17 175
原创 打家劫舍动态规划小结
打家劫舍198,条形的dp[i] = max(dp[i - 2] + nums[i],/偷第i家的/dp[i - 1]/不偷第i家的/);213环形的因为第一个和最后一个是不能挨着,也就是说,选了第一个就不能选最后一个。选了最后一个就是不能选第一个,所以问题可以分分解为两个子问题[0,end-1]的条形[1,end]的条形两个问题的max就是问题的解337 树状的同样的特点,决定该节点的就是偷还是不偷,因此我们定义一个二维的返回值分别代表偷或者不偷的最大受益,每次捡起最大的受益即可
2021-03-20 20:45:03 117
原创 贪心算法小结
遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。例如 406.根据身高重建队列 135. 分发糖果要么从左到右,然后从右到左,两遍遍历,要么在确定一个逻辑的基础上再对另一个限制条件进行排序...
2021-03-15 20:03:14 145
原创 一次有关C++ 增强for循环遍历时候使用的不是引用的记录
记录一下遇到的小问题的解决对于for循环遍历,依次按顺序遍历对象的时候采用的并不是引用,因此我们在遍历时候需要加入引用来解决332. 重新安排行程class Solution {public: unordered_map<string, map<string, int>> targets; bool backtracing(int ticketsNum, vector<string>& result) { //结束条件
2021-03-14 12:08:23 388
原创 回溯算法要点记录
算法模板:如果是一个集合来求组合的话,就需要startIndex,例如:回溯算法:求组合问题!,回溯算法:求组合总和!。如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex,例如:回溯算法:电话号码的字母组合...
2021-03-12 20:16:22 118
原创 二叉树总结记录
如果需要遍历整颗树,递归函数就不能有返回值。如果需要遍历某一条固定路线,递归函数就一定要有返回值!只有寻找某一条边(或者一个节点)的时候,递归函数会有bool类型的返回值。数组转化为树的关键就是找分割点...
2021-03-12 19:45:23 80
原创 记一次对于中序遍历处理的混乱认知
二叉搜索树的最小绝对差犯了一些错误本来写的代码是这样的/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: .
2021-03-11 19:29:35 158
原创 递归的进一步探索
对于这个题目,在我思路还没有理清楚的时候写出了一个可以运行的代码class Solution {public: int sumOfLeftLeaves(TreeNode* root) { //终止条件 if (root == NULL) { return 0; } int lsum = 0; int rsum = 0; if (root->left != NULL &.
2021-03-10 19:41:41 99
原创 递归回溯算法小结
以257. 二叉树的所有路径为例之前忽略或者不成系统的点:一个递归,一个回溯递归是前序遍历,先处理本个节点的逻辑,然后处理左右节点处理左右节点的过程中,递归和回溯要点在于要一一对应这个对应关系是,我需要判断下一层可能发生的逻辑(比如它会将我的path添加了一个元素),然后在回溯里面做出处理(pop)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left
2021-03-10 11:54:44 184
原创 非递归的前中后序遍历二叉树
非递归的前中后序遍历二叉树模板思路:使用栈模拟递归方法,只不过注意进出的顺序要点:谁是要遍历的位置的节点,就将它放进去,然后再塞进去个null,在处理到是Null时,就再拿出一个节点作为当前的值如果不是Null,那么就按顺序将它的左右子树放进栈/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
2021-03-07 22:50:22 79
原创 有序队列
很有参考意义的一个题仔细分析逻辑之后可以参考写出有序队列的代码:class Solution {public: //要点:新的大数的到来可以直接影响到前面的小数,让他们的离开变得无关紧要。毕竟窗口里面已经有了比他们大的数。 class MyQueue { public: deque<int> que; //新的数进来,会使得比它小的数变得无关紧要,因为比它小的在它的前面比它先走,所以不可能是这个队列里的最大值了 void p
2021-03-06 23:31:52 655
原创 数组专题:二分法
刷题重来,打算按专题开始搞,看看前辈的经验,总结一下二分法的判断:如果我认为target在[left,right]里,那么我的判断条件应该定为left<=right,如果出了我的判断,那么只可能会是 right在left的左边,这时候最佳的插入位置为left或者right+1;同理如果我认为target在[left,right)里,那么判断条件应该为left<right,这样的话如果出了我的判断结束条件,只可能会是left=right,这时候最佳的插入位置为left或者right都可以以
2021-03-04 14:06:19 176 1
原创 91. 解码方法
思路:动态规划为什么呢?因为我发现在最后加上一个数或者去掉一个数和前面的问题是一个问题,没有什么不一样,所以应该是后面的问题其实就应该在前面的问题下继续黑箱判断就可以了,和高中学的整体法一样。具体点呢?原来一共有n个,我加了个数进去,如果它不能和前面组成一队,那么总的个数就是,把他自己当成一组,前面多少个它也就还是多少个。dp[i]=dp[i-1]如果它可以和前面的组成一组,那么分组就应该是。他自己一个数一组,和上面一样,共有dp[i-1]个它和前面的那个那个数一组,其它的数一组,共有
2021-02-01 20:17:13 178
原创 90. 子集 II
90. 子集 II还是树的思想,同一层的不能重复,其实也就是看一下每一层的开头就行了i>start就很巧妙的解决了这一点class Solution {public: vector<int> nums; int n; vector<vector<int>> result; //每一层的任务就是看看能不能往下一层放东西 void dfs(int depth,int start,vector<int> cur) { if (depth
2021-01-21 21:46:22 83
原创 88. 合并两个有序数组
88. 合并两个有序数组从屁股插入就可以了class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int index1 = m - 1; int index2 = n - 1; int cur = m + n - 1; while (index1 >= 0 && index2 >= 0) {
2021-01-18 19:06:56 129 1
原创 86. 分隔链表
86. 分隔链表找个大头记录连接着大于目标值的找个小头记录连接小于目标值的最后串起来即可真巧妙,居然链表没乱。因为我遍历的时候是从头到尾一直在跑的,至于我走过的路变成了什么样子,我不关心,只要别挡我的路就行/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {}
2021-01-15 23:10:34 87
原创 85. 最大矩形
85. 最大矩形将矩形抽象成84,柱状图即可class Solution {public: int largestRectangleArea(vector<int>& heights) { stack<int> st; st.push(-1); int maxArea = 0; int n = heights.size(); for (int i = 0; i < height
2021-01-15 22:23:57 89
原创 84. 柱状图中最大的矩形
84. 柱状图中最大的矩形思路:方法一:如果暴力解法,对于某一个柱子,我们让它往两边找,直到找到坑为止就算到头了,然后算面积就是了但是这样也发现,如果我们从头往后遍历,要是下降了,那后面的肯定是前面那个的右边界,对应的他的左边界可以自己往前去搜索一下可以用while()一直找到比它小的heights,然后就是它的左边界但是这样的话,很容易出现重复的遍历方法二对于某个柱子如果它后面是 严格下降的话,那它的右边界就是他本身,到头了如果后面是 上升的话,那么它的右边界是不能确定的,需要往后找
2021-01-15 21:37:05 102
原创 83. 删除排序链表中的重复元素
83. 删除排序链表中的重复元素思路:双指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteDuplicates(ListNode* head) {
2020-12-28 18:04:19 85
原创 82. 删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II思路:预定一个preHead指向head如果发现我的next->val==next->next->val那派出个快指针去找不重复的位置,preHead指向它,再次进行判断,如果符合标准,那么做指针指向这个节点第一次写的成坨的代码/* 思路:预定一个preHead指向head 如果发现我的next->val==next->next->val 那派出个快指针去找不重复的位置,preHead指向它,再次进行判断,如果符合标准
2020-12-28 17:49:10 84
原创 81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II思路:二分法,肯定能分到有序的一半和无序的一半,如果不在有序的一半那就在无序的那一半里面问题在于对于有序的一半的判断一开始想当然的,nums[left]<=mid就是在左半边,否则再右半边,但是这个等号是最难辨别的因为如果mid是中间的话最难分辨了1,3,1,1,1,11,1,1,1,3,1都是不能分辨出来的,因此应该单独拿出来分析,采用缩短区间的方式慢慢的搞了只能class Solution {public: bool search(ve
2020-12-28 16:43:19 91
原创 80. 删除排序数组中的重复项 II
80. 删除排序数组中的重复项 II思路:双指针class Solution {public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) { return 0; } int cnt = 1;//记录我左边接收到几个相同的了 int left = 1, right = 1;//left:指向坑位,right指向要比较的。 while (right < nums.size())
2020-12-28 11:21:04 95
原创 79. 单词搜索
79. 单词搜索思路:回溯上下左右挨个找一遍但是在写代码过程中遇到了一些问题非常烦。处理过程中边界总是划分不清另外回溯过程中尽量先写不成立的,然后return回去,不然太难搞了class Solution {public:bool dfs(int x, int y, int index, vector<vector<char>>& board,string& word, vector<vector<bool>>& vis
2020-12-28 10:03:05 83
原创 78. 子集
78. 子集思路:二进制掩码对于n位数,有2^n种可能性,用二进制表示其对应的位的有无即可class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> result; vector<int> temp; int n = nums.size(); // [][] 1<<
2020-12-27 18:03:56 59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人