leetcode+建瓯+零学算三+宝典5
文章平均质量分 63
二分二
fgh431
非淡泊无以明志
展开
-
宝5:16 OS
都是原创 2020-11-12 21:37:45 · 119 阅读 · 0 评论 -
四:常用算法---排序
文章目录4.5堆排序法4.5.1算法描述1.构成堆4.5堆排序法选择排序4.5.1算法描述完全二叉树节点满足(1)如果从小到大排非叶节点要>=其左、右子节点排序要大根堆(2)从大到小排非叶节点<=其左、右子节点 堆对节点的左右孩大小没要求只规定父和子节点数据间须满足条件 从小到大排为例,介绍堆排堆定义看出,根节点为最大,堆排序就利用这一特点排序堆排序两阶段(1)将无序数据构成堆(用无序数生成满足堆定义的完全二又树原创 2020-08-30 14:49:39 · 148 阅读 · 0 评论 -
二叉搜索树的第k大节点
文章目录这个其实很简单二叉搜索树的三个先序中序后序遍历大家都清楚但只有中序遍历是从小到大的 这道题我们只要能保证从大到小访问这个二叉树就好了也就是假的“中序遍历”先访问右孩子再访问父亲再访问左孩子 class Solution {public: int count=0; int kthLargest(TreeNode* root, int k) { if(!root) return -1;原创 2020-10-29 14:11:08 · 134 阅读 · 0 评论 -
Offer 43. 1~n整数中1出现的次数+有多少个1系列?
文章目录1\~9999有多少个1?1\~21345有多少个1?10\~109有多少个1?1~9999有多少个1?显然是4位4×103=40004\times 10^3=40004×103=4000个1~21345有多少个1?1~9999有4000个110000~19999有多少个1?10~109有多少个1?这里总共100个数 1的分两部分,一个是高位引起的,然后是其他位引起的。 首先百位是1的肯定有10个那个位和十位的1一共多晒个呢?其实就是1~99中1的个原创 2020-08-30 17:15:31 · 310 阅读 · 0 评论 -
5:优化时间和空间效率
文章目录39:数组中出现次数超过一半的数字解法一:基于Partition的时间复杂度为O(n)O(n)O(n)40:最小的k个数解法一:39:数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,找出它解法一:基于Partition的时间复杂度为O(n)O(n)O(n)把数组排序排序之后位于数组中间的数字一定就是那个数就是统计学上的中位数长度为n的数组中第n/2大数有成熟的时间复杂度为O(n)得数组中任意第k大的数 随机快排中,先在数组中随机选原创 2020-07-25 18:57:58 · 553 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
文章目录旋转数组的最小数字旋转数组的最小数字 我先来一个死方法其实这相当于遍历了,哎,我太菜了,我想想还有啥方法呢?class Solution {public: int minArray(vector<int>& numbers) { int end = numbers[numbers.size()-1]; int start = numbers[0]; if(end > start)原创 2020-08-24 16:35:06 · 166 阅读 · 0 评论 -
面试题 16.01. 交换数字
文章目录交换数字到头来还是^交换数字哎,这道题本来是字节跳动面试我的题目我当时居然没刷到这道题,悔恨啊!!! 下面这样做,结果说+起来溢出了2 35 3 numbers[0] = numbers[0]+numbers[1];5 2 numbers[1] = numbers[0]- numbers[1];3 2 numbers[0] = numbers[0]- numbers[1];class Solution {public: vector<原创 2020-08-24 14:49:47 · 180 阅读 · 0 评论 -
287. 寻找重复数(天然就重复)
文章目录寻找重复数(天然就重复)寻找重复数(天然就重复)啥叫天然就重复因为n+1个数,范围才n这么大,所以天然就重复了正是由于他里面天然带有重复所以必然将1-n拆分=成1~m,m+1~n的时候绝对不会存在这样情况:1~m在数组里出现<=m次m+1~n出现<=n-m次 事实上,由于总的次数是n+1如果1-m出现的次数<= m次那么必然导致m+1~n出现的次数>=n-m+1次导致m+1~n必然是含有重复值的 更一般的对于[l原创 2020-08-24 13:51:07 · 183 阅读 · 0 评论 -
52. N皇后 II:我的解法简单又好懂
文章目录注意,这道题是要求所有可能的个数。因此就不能用我之前干的办法,用g_success变量了我这里用了g_count了,另外一点,这里不需要flag去干活,而是需要is_valid去判断是否可以放在(i,j)上!class Solution {public: int *g_A;//n个元素 int g_n; int g_count; bool is_valid(int i,int j)//现在放到(i,j)合法吗? { for(原创 2020-08-24 11:50:03 · 259 阅读 · 2 评论 -
刷题之边界条件注意
文章目录刷题之边界条件注意例1canci刷题之边界条件注意例1其实就是需要处理特殊情形这个题目,由于我们要确定一个数出现多少次的时候必须到这个字符的下一个字符才能确定但如果出现了5 4 4 1 3 3 3【结束】我们则不能在3的下一个来判断3出现了几次所以这是一个特殊情形可以用if(i==n-1)来判断#include <stdio.h>#include <iostream>using namespace std;void print(i原创 2020-08-21 23:58:12 · 712 阅读 · 0 评论 -
785. 判断二分图
文章目录785. 判断二分图开始的时候思路DFS785. 判断二分图开始的时候思路class Solution {public: bool isBipartite(vector<vector<int>>& graph) { map <int,bool> a; map <int,bool> b; vector<vector<int>>::iterator iter=原创 2020-08-15 20:17:50 · 190 阅读 · 0 评论 -
链表排序的感悟
文章目录链表排序的感悟链表排序的感悟当然可以用分治法首先找到中间结点要O(n)O(n)O(n)合并两个也要O(n)O(n)O(n)害! void mergesort(Node *left, Node *right){ if(left==right) return else { Node *middle = 靠左边的Node; mergesort(left,middle); mergesort(mi原创 2020-08-14 00:07:53 · 167 阅读 · 0 评论 -
two hundred one weekly
文章目录5483. 整理字符串5484. 第N 个二进制字符串中的第 K 位5483. 整理字符串大小写英文字母组成的字符串 s一个整理好的字符串中s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。 将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好。 class Solution {public: string makeGood(string s) { int len= s.size(原创 2020-08-09 12:11:19 · 177 阅读 · 0 评论 -
第 32 场双周赛
文章目录5468. 第 k 个缺失的正整数5469. K 次操作转变字符串未完待续5468. 第 k 个缺失的正整数严格升序排列 的正整数数组 arr 和整数 k 这个简单啊,我就直接从1开始搜索啊class Solution {public: int search(vector<int>& arr,int target) { int start=0; int end=arr.size()-1; whi原创 2020-08-09 00:26:59 · 168 阅读 · 0 评论 -
二叉树的最近公共祖先
文章目录二叉树的最近公共祖先二叉树的最近公共祖先原创 2020-07-29 12:17:58 · 195 阅读 · 0 评论 -
189. 旋转数组
189. 旋转数组老子的思路1每次上右边移动一次这样不就行啦void rotate(int* nums, int numsSize, int k){ k=k%numsSize; while(k>0) { int temp=nums[numsSize-1]; for(int i=numsSize-1;i>=1;i--) { nums[i]=nums[i-1]; }原创 2020-07-29 01:00:44 · 157 阅读 · 0 评论 -
62. 不同路径;
文章目录62. 不同路径62. 不同路径 输入: m = 3, n = 2输出: 3这不是和高中的题目是一样的吗高中时候是站在点上啊现在是站在方框里了你看一共要走3步只有1步是向右边的所以就是C31=3C_3^1=3C31=3 这道题答案就是Cm+n−2m−1C_{m+n-2}^{m-1}Cm+n−2m−1答案很简单啊int uniquePaths(int m, int n){ int (*B)[n]=(int (*)[n])malloc(s原创 2020-07-28 17:14:55 · 168 阅读 · 0 评论 -
最长上升子序列
文章目录最长上升子序列最长上升子序列原创 2020-07-27 22:25:55 · 140 阅读 · 0 评论 -
二叉树前序遍历+二叉树中遍历+二叉树前序、中序、后序遍历—迭代方法
文章目录二叉树前序遍历![](https://img-blog.csdnimg.cn/20200727203314718.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3V0aWFuemkxMg==,size_16,color_FFFFFF,t_70)二叉树前序遍历/** * Definition for a binary tree n原创 2020-07-27 20:33:41 · 215 阅读 · 0 评论 -
数组中出现次数超过一半的数字
文章目录数组中出现次数超过一半的数字数组中出现次数超过一半的数字首先是如果我是<=的话,那他将超出时间来int partition(int A[], int start, int end){ int temp; int initial = A[end]; int i = start - 1; for (int j = start; j <= end - 1; j++) { if (A[j] < initial) { i++; temp =原创 2020-07-25 21:37:53 · 153 阅读 · 0 评论 -
扑克牌中的顺子
文章目录扑克牌中的顺子解答1扑克牌中的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字解答1他妈的不就是先排序,看看有几个零对吧然后必须保证非零的地方没有重复啊然后统计这个非零数之间的空缺啊,看有几个空缺,只要空缺个数<=零的个数就可以成功class Solution {public: bool isStraight(vector<i原创 2020-07-23 23:25:54 · 246 阅读 · 0 评论 -
922. 按奇偶排序数组 II
文章目录922. 按奇偶排序数组 II922. 按奇偶排序数组 II/** * Note: The returned array must be malloced, assume caller calls free(). */int* sortArrayByParityII(int* A, int ASize, int* returnSize){ *returnSize = ASize; int i_even = 0; int j_odd = 1; for (i_原创 2020-07-13 22:29:45 · 133 阅读 · 0 评论 -
火柴拼正方形
文章目录火柴拼正方形火柴拼正方形 首先你要写排序把void quicksort(int A[],int start,int end){ if(start<end) { int q = partition(A,start,end); quiksort(A,start,q-1); quicksort(A,q+1,end); }} int partition (int A[],int start,int end)原创 2020-07-12 21:42:44 · 304 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符
char firstUniqChar(char* s){ char *p=s; int number[26]={0};//a,b,c,...,z while(*p!='\0') { number[*p-'a']++; p++; } p=s; while(*p!='\0') { if(number[*p-'a']==1) return *p; p++; ..原创 2020-07-10 22:50:25 · 145 阅读 · 0 评论 -
二叉树的深度
文章目录二叉树的深度二叉树的深度/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int maxDepth(struct TreeNode* root){ if(root==NULL) return 0; int r原创 2020-06-30 14:50:13 · 167 阅读 · 0 评论 -
审成数组
文章目录申城数组思考代码申城数组思考要求后面比前面大的只有k个递增子序列为k+1个吧算上第一个-1代码原创 2020-04-20 21:38:24 · 133 阅读 · 0 评论 -
二分系列
文章目录升序二分查找升序二分查找int search(int* nums, int numsSize, int target){ int start=0; int end=numsSize-1; while(start<=end) { int mid=(start+end)/2; if(nums[mid]==target)...原创 2020-04-14 20:04:43 · 187 阅读 · 0 评论 -
两数之和
文章目录 首先定义一个结构体Num包含value和indexstruct Num{ int value; int index;};bool cmp(const Num &n1, const Num &n2){ return n1.value < n2.value;}class Solution{public: ...原创 2020-04-14 11:12:58 · 216 阅读 · 0 评论 -
哑结点
文章目录哑结点哑结点就是放在第一个存放数据结点之前、头指针之后的结点。它没有实际意义。好处:由于每个非空节点都有一个前驱,这是一种减少列表处理所需特殊情况的方法...原创 2020-04-13 21:57:52 · 389 阅读 · 0 评论 -
快慢指针+双指针
文章目录链表中快慢指针1 链表简介2 快慢指针的妙用2.1 找中间值2.2 判断链表中的环2.3 删除倒数第n个节点链表中快慢指针1 链表简介说起链表的样子如下图,2 快慢指针的妙用快慢指针就是定义两根指针,移动的速度一快一慢,以此来制造出想要的差值这个差值可让我们找到链表上相应节点2.1 找中间值一般思路:先遍历一次链表,记录住一共有多少个节点,然后,再次...原创 2020-04-13 19:18:10 · 404 阅读 · 0 评论 -
动态规划系列之里扣
文章目录最大子序和最大子序和int maxSubArray(int* nums, int numsSize){ //令dp[n]表示从nums[0..n]的最大和且必须包含nums[n] //那么dp[n+1]=dp[n]+nums[n+1] 如果dp[n]>0 // =nums[n+1] 否则 int *dp=(int *)mal...原创 2020-04-11 13:00:05 · 281 阅读 · 0 评论 -
最大乘积
文章目录#include <stdio.h>#include <stdlib.h>int main(){ int m=0; scanf("%d",&m); int *A=(int *)malloc(sizeof(int )*m); for(int i=0;i<m;i++) { scanf("...原创 2020-03-30 15:58:37 · 289 阅读 · 0 评论 -
逆波兰式
文章目录逆波兰式定义逆波兰式也叫后缀表达式(运算符写在操作数之后)定义表达式E的后缀形式可以如下定义:如果E是一个变量或常量,则E的后缀式是E本身。如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’ op,E1’和E2’分别为E1和E2的后缀式。如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。...原创 2020-03-29 11:49:33 · 741 阅读 · 0 评论 -
分式化简
文章目录代码我写的代码cont代表连分数的系数(cont[0]代表上图的a0,)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。代码/** * Note: The returned array must be malloced, assume caller calls free(). */#define SWAP(a,b) {in...原创 2020-03-28 17:23:44 · 922 阅读 · 0 评论 -
Z字形变换
文章目录将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H Nchar * convert(char * s, int numRows){ if(numRows==1) r...原创 2020-03-28 16:51:10 · 167 阅读 · 0 评论 -
给出一个正整数N和长度L,
给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,需要找出长度最小的那个。例如 N = 18 L = 2:5 + 6 + 7 = 183 + 4 + 5 + 6 = 18都是满足要求的,我们输出更短的 5 6 7#include<iostream>using namespace std;int main() { ...原创 2020-03-19 10:59:05 · 4556 阅读 · 0 评论