自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 Leetcode 236. 二叉树的最近公共祖先

该题有两种解法,深搜和广搜,深搜整体更优广搜更加好想,保留每次循环队列最后一个节点值class Solution {private: vector<int> result; int max_index = -1; void dfs(TreeNode* root,int startIndex) { if (root == nullptr) return; if (startIndex > max_index)

2022-04-16 00:03:25 517

原创 二叉树的迭代版 前中后序遍历(完整)

前序遍历 根左右 (将右节点压栈)1.往左遍历记录当前值,并将右节点压栈2.直到当前节点为空,取出栈顶右节点作为下一次循环起始/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *

2022-04-15 15:42:26 838

原创 Leetcode分类常刷

滑动窗口关键词 连续子串子数组3 . 无重复字符的最长子串643 . 子数组最大平均数 I644 . 长度最小的子数组1695 . 删除子数组的最大得分438. 找到字符串中所有字母异位词567 . 字符串的排列(和438一样)439. 最大连续1的个数 III1208 . 尽可能使字符串相等...

2022-03-18 15:10:51 471

原创 Leetcode148 排序链表(大白话说思路)——链表专题

思路:找中点,用递归不断分割,然后使用合并有序链表的方法合并左右链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, L

2022-03-18 11:03:32 1307

原创 Leetcode80 删除有序数组中的重复项 II(大白话说思路)——数组专题

思路:只需掌握一个套路,如何移动下标从当前位置找到第一个不等于当前位置值的下标???模板如下int temp = i;while(temp<nums.size()&&nums[temp]==nums[i])temp++;i =temp;删除删除有序数组中的重复项class Solution {public: int removeDuplicates(vector<int>& nums) { int cur = 0;

2022-03-17 10:58:16 486

原创 Leetcode140 环形链表(大白话说思路)——链表专题

思路:判断是否有环,快慢指针相遇即有环找环的入口,承接是否有环,相遇后将慢指针移到链表头,两个指针以相同每次移动一次的速度移动直到相等,返回当前节点即为答案为什么找环的入口,只要一个在相遇节点一个在链表头同时走,相遇即为环入口?slow指针在紫色节点时走过的路程等于a+bfast指针在紫色节点时走过的路程等于a+b+(b+c)*K2(a+b)=a+b+(b+c)∗K化简后为a=(K−1)∗b+K∗c2(a+b)=a+b+(b+c)*K化简后为a=(K-1)*b+K*c2(a+b)=a+b+(b

2022-03-14 17:22:51 1129

原创 Leetcode160 相交链表(大白话说思路)——链表专题

思路:两个指针分别指向两条链表头,每人一次走一步如果为空移到另一条链表,直到两个指针相等,返回指针。为什么两个指针一定会相等?两个指针走lenA+lenB-(相交的长度)的步数一定会相遇class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode*p = headA; ListNode*q = headB; w

2022-03-14 15:36:32 390

原创 Leetcode23 合并K个升序链表(大白话说思路)——链表专题

思路:写出mergetwo,不断合并(比较好想好写)mergetwo当 p q都不为空的时候,根据两者大小选择连哪一个,被选择的移到下一个,直到p q其中有一个为空,最后连上不为空的那一条class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode* head = NULL; for(auto&node:lists){

2022-03-11 16:15:19 253

原创 Leetcode25 K 个一组翻转链表(大白话说思路)——链表专题

思路:反转链表首先记录需要进行几次翻转操作写翻转函数,输入head tail 返回新的head连接翻转后的子链表(循环)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr

2022-03-08 20:05:10 276

原创 Leetcode143重排链表 (大白话说思路)——链表专题

思路:非官方做法,我的第一直觉代码如下,用hash表记录pre节点,双指针不断将末尾节点移到前面,更新指针向中心移动,直到p!=q&&p->next!=q时间复杂度和空间复杂度都很高,但是能过class Solution {public: void reorderList(ListNode* head) { ListNode*p = head; ListNode*q = head; //记录pre hash表查询前一个节点

2022-03-08 15:45:56 282

原创 Leetcode42接雨水(大白话说思路)——数组专题

法一动态规划:left[i]记录下标0-i-1最大的值,right[i]记录下标i+1-n-1最大的值class Solution {public: int trap(vector<int>& nums) { int n = nums.size(); vector<int>left(n); vector<int>right(n); for(int i=1;i<n;

2022-02-17 00:47:54 446

原创 C++ std::accumulate()使用注意事项

如果使用accumulate累加long long 或double类型,需在第三个参数处标明类型 vector<ll>beans(v.begin(),v.end()); ll sum = accumulate(beans.begin(),beans.end(),(ll)0);否则以下可能使用会导致int越界 ll sum = accumulate(beans.begin(),beans.end(),0);...

2022-02-13 15:27:33 825

原创 Leetcode 滑动窗口小结

无重复子串class Solution {public: int lengthOfLongestSubstring(string s) { int n = s.size(); int left = 0; int ans = 0; unordered_map<char,int>hash; for(int right = 0;right<n;right++){ hash[s[ri

2022-02-09 23:26:45 313

原创 Leetcode230滑动窗口最大值(大白话说思路)——数组专题

思路1:维护优先队列prioprity_queue<int,int>pq记录数组值和下标,push以后不断地判断队头是否下标在滑动窗口范围内,若不是出队,否则即为当前最大值。思路2:维护双端队列deque<int>dq记录数据下标,维护一个单调递减的队列,每次判断队头下标是否在范围内,若不是pop_front,否则为当前最大值思路二代码class Solution {public: vector<int> maxSlidingWindow(vector&

2022-01-29 11:58:02 722

原创 Leetcode229求众数(大白话说思路)——数组专题

思路:摩尔投票法,类似与消消乐,拿最多次数的两个数和其他数做抵消,最后留下的肯定是次数多的数。摩尔投票法可以推广到「统计出现次数超过 n / k的所有数」。代码如下class Solution {public: vector<int> majorityElement(vector<int>& nums) { int num1=0,num2=0,cnt1=0,cnt2=0; for(auto&num:nums){

2022-01-14 11:59:34 178

原创 C++ lower_bound和upper_bound以及binary_search算法

lower_bound 返回一个非递减序列[first, last)中的第一个大于等于值val的位置upper_bound 回一个非递减序列[first, last)中第一个大于val的位置#include<bits/stdc++.h>using namespace std;int main(){ vector<int> A; set<int>B; A.push_back(1); A.push_back(2); A.p

2022-01-11 15:57:47 361

原创 Leetcode219存在重复元素Ⅱ(大白话说思路)——数组专题

思路:用数据结构维护一个长度为k的集合,不断往集合里面填数,判断该数是否存在在集合中,当size大于k时抹掉最前端的元素从而维护长度小于等于k的集合。class Solution {public: unordered_set<int>set; bool containsNearbyDuplicate(vector<int>& nums, int k) { int n =nums.size(); for(int i=0;i&l

2022-01-11 11:31:47 204

原创 Leetcode209 长度最小的子数组(大白话说思路)——数组专题

思路:滑动窗口,当sum>=target的时候不断收缩左边界直到sum<target,再扩展右边界直到数组末尾直接上代码class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int n = nums.size(); int l = 0,r = 0; int sum = 0; int ans = INT_

2022-01-11 10:55:26 114

原创 画质、分辨率、帧率之间有什么关系与区别?

分辨率分辨率指像素的个数,例如4K即4096*2160像素分辨率指的都是水平方向每行像素值达到或者接近4096,垂直方向每行像素值达到或者接近2160,决定了图像细节的精细程度。画质画质就是画面质量(主观概念)。游戏画质是通过GPU运算指令排列组合成的画面效果,决定的技术因素有很多。比如分辨率、帧率、模型、锯齿、阴影、光影、贴图精度等等都会影响画质的最终显示效果,也就是说分辨率是影响画质的因素之一。帧率帧率指每秒播放的画面数(FPS)码率码率或叫位速率,是单位时间内视频(或音频)的数据量码率

2021-12-20 18:04:55 16485

原创 Leetcode135分发糖果(大白话说思路)——数组专题

思路:计算每一个每一个元素左/右(包括自己)最长递减序列的长度。例如:1,2,2第一个数1 左最长递减序列:1 右最长递减序列:1 分到的糖果为max(左长度,右长度)=1第二个数2 左最长递减序列:2 、1 右最长递减序列:2、2 分到的糖果为max(左长度,右长度)=2第三个数2 左最长递减序列:2 右最长递减序列:2 分到的糖果为max(左长度,右长度)=1result = 1+2+1 =4问题:为什么第二个数右最长

2021-12-09 16:39:22 211

原创 Leetcode134加油站(大白话说思路)——数组专题

思路:模拟以下列数据为例gas = [1,2,3,4,5]cost = [3,4,5,1,2]从index 0开始行驶,我们到index1时汽油存量store += gas[0]-cost[0] = -2,那显然无法从index0到index1从index1开始行驶,我们到Index2时汽油存量store += gas[1]-cost[1]=-2,那显然无法从index1到index2从index…直到从index3开始行驶,我们到index4汽油存量 store += gas[4]-cos

2021-12-07 20:09:23 121

原创 如何在Android Studio开启Databinding数据绑定?

在build.gradle中添加buildFeatures { viewBinding true }即可使用Databinding

2021-12-03 14:53:55 2148

原创 柱状图中最大的矩形(大白话说思路)——数组专题

思路:分别找到元素两边第一个比该元素小的元素的坐标left[i]和right[i],以该元素为高的并包括该元素的最大矩形面积为(right[i]-left[i]-1)*nums[i],遍历所有元素重复以上操作更新最大面积。单调栈问题主要解决以下问题:比当前元素更大的下一个元素的坐标或者值比当前元素更大的前一个元素的坐标或者值比当前元素更小的下一个元素的坐标或者值比当前元素更小的前一个元素的坐标或者值例如[1,2,3]希望求得每个位置第一个比当前值大的元素的值,可以非常容易求得序列为[2,3,

2021-11-26 17:29:10 2168

原创 mac使用vscode编写C++ #include<bits/stdc++>出现波浪线——无法找到头文件

第一步:找到头文件路径,右键#include<iostream>点击转到定义,点击文件在Finder中显示第二步:新建bits文件夹在文件夹中新建stdc++.h内容如下// C++ includes used for precompiling -*- C++ -*-// Copyright (C) 2003-2014 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library.

2021-11-17 02:07:12 1841

原创 vscode c++ 环境文件配置

tasks.json// tasks.json 配置文件{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "type": "shell", "label": "task g++

2021-11-12 17:37:10 1023

原创 颜色分类/荷兰国旗问题(大白话说思路)——数组专题

思路:维护两个边界,左边界zero右边界two,使用one进行遍历,遇到0将与nums[++zero]交换,遇到1继续走,遇到2将其与nums[–two]交换。class Solution {public: void sortColors(vector<int>& nums) { int zero = -1,one=0,two = nums.size(); while(one<two){ if(nums[one]=

2021-11-11 16:51:23 818

原创 解数独和N皇后问题(大白话说思路)——数组专题

思路:哈希表+回溯解数独维护以下哈希表行关于值的哈希表rows[9][9]列关于值的哈希表columns[9][9]3*3表格关于值的哈希表squares[3][3][9]N皇后维护以下哈希表列的哈希表 unordered_set/columns横纵坐标和的哈希表 unordered_set/add横纵坐标差的哈希表 unordered_set/reduce解数独代码:class Solution {public: bool rows[9][9]; bool c

2021-11-04 16:11:36 96

原创 HandlerThread源码解读和基本使用方法

HandlerThread源码解读HandlerThread是为了方便用户使用多线程来接收处理消息的工具类。HandlerThread源码实际上十分简洁,具体如下:public class HandlerThread extends Thread { private Looper mLooper; public HandlerThread(String name) { super(name); } @Override public void

2021-11-02 10:59:05 223

原创 全排列1、2(大白话说思路)——数组专题

思路:回溯全排列1以求[1,2,3]全排列为例dfs(0)代表第一层,在第一个位置可以选1,2,3,dfs(1)代表第二层,在这个位置可以选1,2,3以此类推,使用回溯求解全排列2以求[1,1,0]全排列为例dfs(0)依然代表第一层,在第一个位置可以选1,1,0但是我不希望第一个位置去选第二个1,因为这样会导致选取的排列重复,因此需要判断若当前与前一位相同时,前一位被选了吗?如果没被选,则不能选 'if(st[i]||(i>=1&&nums[i-1]==nums[i]&a

2021-11-01 11:31:08 121

原创 跳跃游戏/跳跃游戏2(大白话说思路)——数组专题

思路:贪心,跳跃游戏1和跳跃游戏2最大的区别在于前者不保证能走到数组尾,而后者保证可以走到。因此跳跃游戏1需要走一步看一步(判断当前是否能走到),而跳跃游戏2最重要的是如何更新step。先看跳跃游戏1的代码class Solution {public: bool canJump(vector<int>& nums) { int edge = 0; for(int i=0;i<nums.size();i++){ //走一步

2021-10-27 10:31:40 122

原创 在排序数组中查找元素的第一个和最后一个位置(大白话说思路)——数组专题

思路:经典中的经典,二分问题,采用左开右闭的区间。当我们要找左边第一个等于target的元素我们应该去用mid更新r边界,而右边应该去用mid更新l边界。注意点1:当更新r区间是不包括r坐标(左闭右开),更新l区间是包括l坐标。注意点2:当没找到的时候,需要注意返回的坐标判断if的时候在[0,nums.size()-1]的范围内防止越界。class Solution {public: vector<int> searchRange(vector<int>& n

2021-10-12 19:28:49 156

原创 Android——超简单为ImageButton添加按下动画的方法

在对应ImageButton xml属性添加android:background="?android:selectableItemBackground"即可实现按下动画

2021-10-03 15:06:13 398

原创 Android Studio 在项目中使用Kotlin @RequiresApi(Build.VERSION_CODES.R) R为红色报错 “unresolved reference R“ 解决

在网上查询无果,自己摸索。发现最后是R版本SDK有问题,卸载R版本SDK,重新安装解决。Android studio 界面 File->Settings->Android SDK 取消勾选 Android11.0(R)->点击Apply->卸载Android11.0(R)SDK->Android SDK 勾选 Android11.0(R)->点击Apply->重新安装SDK问题得到解决!(耗费一天时间 cnm AS)...

2021-09-28 18:07:20 3858

原创 搜索旋转排序数组(大白话说思路)——数组专题

搜索旋转排序数组思路:二分,分类讨论当mid在左半边有序序列和mid在右半边有序序列。左图mid在左半边序列,右图mid在右半边序列。在左半边序列时,如果target=5也就是说 target>=nums[0]&&target<=nums[mid]的情况下应在[l,mid-1]的范围中寻找,如果target=2也就是说target<=nums[nums.size()-1]&&target>=nums[mid]的情况下应在[mid+1,r]中寻找

2021-09-28 17:54:15 127

原创 下一个排列(大白话说思路图示)——数组专题

下一个排列思路:从数组末尾开始找到一个比前一个大的数,该数下表为i,在从数组末尾重新遍历直到i找到第一个比i-1的大的数,将该数和i-1交换,并将数组(nums.begin()+i,nums.end())排序,即得到结果。如果数组一开始就是降序排列需要特判。例如下图1.找到第一个比前一个大的数是坐标3即途中i指向的4.2.数组末尾重新遍历找到第一个比nums[i-1]大的数nums[j]3.将nums[j]和nums[i-1]交换位置4.排序i-1后面的元素,sort(nums.begin

2021-09-26 11:09:35 81

原创 四数之和(大白话说思路)——数组专题

四数之和(大白话说思路)——数组专题思路:不重复赘述,思路参照三数之和重点就是边界和在遍历时跳过重复的数,直接上代码。class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); vector<vector<int>>res;

2021-09-23 19:33:26 91

原创 最接近的三数之和(大白话说思路)——数组专题

最接近的三数之和(大白话说思路)——数组专题思路:与三数之和非常相似,首先排序,遍历数组固定第一个下标后化简为两数之和,使用双指针求解。难点在于边界和跳过相同的数(不跳过相同的数会超时)。结合代码注释理解。class Solution {public: int threeSumClosest(vector<int>& nums, int target) { //排序,双指针需要数组有序 sort(nums.begin(),nums.end

2021-09-23 16:04:56 107

原创 三数之和(大白话说思路)——数组专题

三数之和(大白话说思路)——数组专题再解说这题解法之前,先解决一个问题,如何当有序递增数组有重复元素时,如何找到第一个比当前元素大的数,代码如下。//当前数为 i int index = i;while(index<nums.size()&&nums[index]==nums[i])index++;i = index;思路:双指针,首先排序数组,遍历数组对于每一个元素nums[i]之后的数组做目标值为-nums[i]的两数之和。重要的是无论是双指针内部还是大循环中都需要在

2021-09-22 09:46:11 164

原创 盛最多水的容器——数组专题(大白话说思路)

盛最多水的容器——数组专题思路:双指针,p指针指向数组第一个数,q指针指向数组最后一个数,用一个变量记录最大雨水量计算当前雨水量,若比最大雨水量大,更新最大雨水量。如果nums[p]<nums[q],p往里移一位(p++),反之q往里移一位(q–)重复上一步操作,直至两指针相遇,返回最大雨水量重点:小伙伴一定有疑问,为什么nums[p]<nums[q],p往里移一位(p++),反之q往里移一位(q–)就可以覆盖到所有可能是最大雨水量的结果呢???反证法,假设数组的最大雨水量出自

2021-09-17 19:46:58 107

原创 寻找两个正序数组的中位数——数组专题(大白话说思路)

寻找两个正序数组的中位数——数组专题思路:二分,将问题分解为在两个数组中找第k大的数,根据这个函数分奇偶情况输出结果。如何求解第k大的数呢?因为两个数组都是有序,只要我们将两个数组中属于前k-1大的数都排除掉,就能求得第k大的数。例如nums1数组前x位数被排除,nums2数组前y位被排除(x+y=k-1),那么第k大的数就是min(nums1[x],nums2[y])。注意边界代码略(力扣官方题解第一种做法),思路比代码重要‼️...

2021-09-17 19:28:25 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除