
每日一题
Co丿Hx
西南石油大学CS研究生。发表ccfc类论文两篇,专利一项,获国家奖学金等多项奖学金,现就职于招银网络科技。
展开
-
leetcode 204. 计数质数
加速500 ms题目描述思路通过填充相应质数整数倍位置来减少计算次数。大量重复计算注意判断指数模板for(i=2~n-1) if(i*i) > n return true if(n%i==0) return falsereturn false代码class Solution {public: bool isPrimes(int n) { for(int i=2;i<=n-1...原创 2020-08-02 15:35:38 · 156 阅读 · 0 评论 -
最长递归子序列 O(logn) 作业帮 面试题
思路动态规划O(n^2)dp 含义当前结尾最长序列 状态转移 max(dp[],dp[0~n-1] + 1) 每次需要循环n次代码 int len = nums.size(); vector<int> dp(len,1); //dp i 以i结尾的最长子序列长度 dp[0] = 1; int ret = 1; for(int i=1;i<nums.size();i++) ...原创 2020-08-01 18:01:51 · 445 阅读 · 0 评论 -
科大讯飞算法岗笔试题2,让字符串成为回文串的最少删除次数
题目描述思路这道题思路很难想到讯飞的原描述是需要删除的次数。当然将不是回文子序列的删除与插入不同的字符是一个意思例如 mbadm 与 mdabm 最大公共子序列为mam如果删除 则需要删除bd如果插入 也只需要 插入bd代码class Solution {public: int minInsertions(string s) { string s1=s; string s2=s; vector<vector原创 2020-08-01 14:40:14 · 1010 阅读 · 0 评论 -
leetcode 739. 每日温度
题目描述请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。来源:力扣(LeetCode)...原创 2020-06-12 00:17:39 · 201 阅读 · 0 评论 -
leetcode 693. 交替位二进制数 leecode 535 TinyURL 的加密与解密
思路移位解决 当然有O(1) 解法 (n>>1) ^ n 判断结果是否全1代码class Solution {public: bool hasAlternatingBits(int n) { int pre=n&1; n = n >> 1; int cur=0; while(n) ...原创 2020-05-04 23:52:37 · 185 阅读 · 0 评论 -
leetcode 翻转链表
题目描述思路模板 伪代码ret = dfs(ret->next);ret->next->next = head;head->next = NULLreturn ret代码class Solution {public: ListNode* dfs(ListNode* head) { if(head==NULL||head-&...原创 2020-04-30 20:58:57 · 200 阅读 · 0 评论 -
leetcode 92翻转链表 递归
题目描述思路函数思想创建reverseN 递归找到需要递归的点代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */...原创 2020-04-30 20:49:57 · 206 阅读 · 0 评论 -
面试题51. 数组中的逆序对 归并排序
题目描述思路这道题利用归并排序合并数组时进行判断达到完成题解的目的归并排序多一行代码。global_count += (mid-i+1); //计算有序数对 对数代码class Solution {public: void show_array(vector<int> nums) { for(auto num:nums)...原创 2020-04-24 10:34:21 · 190 阅读 · 0 评论 -
leetcode 1248. 统计「优美子数组」
题目描述题目链接思路进行思路转化。使用前缀和进行计算。如果前i个数 有5个奇数,前j个数有10个奇数,那么子数组i j之间为arr[j] - arr[i] = 5个奇数。即是求解 arr[j] - arr[i] == k TWOSUM伪代码//step1 //求arr[0~n-1] 代表以下标结尾奇数个数 for 0 ~ n-1 ...原创 2020-04-21 10:07:07 · 198 阅读 · 0 评论 -
300. 最长上升子序列
题目描述思路使用动态规划dp记录以当前值为终点的最长子序列。状态转移方程为for i = 1~n-1 for j=0 ~i dp[i] = max(dp[i],d[j]+1)用maxret来记录最大值for i = 1~n-1 for j=0 ~i dp[i] = max(dp[i],d[j]+1) maxret = max(ma...原创 2020-04-18 09:53:26 · 150 阅读 · 0 评论 -
leetcode 56. 合并区间
题目描述思路排序后根据ret 数组最后一个元素的引用 与新加入区间 I[0] 第一个元素的大小进行判断。若无交集 则加入取件i 否则更改返回区间的最后一个元素为 i区间第一个元素 与 ret区间的最后一个元素的最大值伪代码 if ret.empty()||i[0] > ret.back()[1] ret.push(i) else ret.back()...原创 2020-04-17 10:05:48 · 188 阅读 · 0 评论 -
leetcode 377. 组合总和 Ⅳ 动态规划模板
题目描述思路动态规划模板与我写的零钱兑换一个样子伪代码for i 1~target 左闭右闭 for num:nums dp[i] += dp[i-num] \\试探return dp[target]代码class Solution {public: int combinationSum4(vector<int>&a...原创 2020-04-14 08:51:19 · 238 阅读 · 0 评论 -
leetcode 322. 零钱兑换 标准dp
题目描述思路有用回溯做的,但是此题是标准的dp问题。dp[i] 表示i金钱需要最少零钱数目。伪代码for 0 ~ amount for coin : coins dp[i] = min(dp[i],dp[i-coin]);return dp[amount]==amount+1? -1:dp[amount] //判断是否能兑换代码cla...原创 2020-04-13 09:49:51 · 246 阅读 · 0 评论 -
leetcode 22. 括号生成
题目描述思路思路1.使用dfs搜索长度,然后valid进行判断思路2.直接左右两边进行搜索。代码思路1.class Solution {public: vector<string> ans; string cho = "()"; string temp; void dfs(int n) { if(n...原创 2020-04-09 10:38:02 · 117 阅读 · 0 评论 -
leetcode 345 整数拆分,理解动态规划。
前言这个题思考了很久动态规划,当你思考明白时觉得,动态规划很巧妙。模板dp[n+1] 数组 1 ~ n 存放以当前数字拆分最大值得结果,所以规划完成后返回dp[n]for 2~i 填数组 for j=1~i-1 对于每个i有i-1种拆分方式 对于i 两种选择 拆分与不拆分。 第一个max判断拆分j哪一个最大,第二个max判断dp[j]是否需要再拆分。即是拆分最...原创 2020-04-04 09:35:02 · 395 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi) 面向测试编程
前言这道题就是考验你耐心,对于每种异常情况的处理,思路上没有大的差别,不像那些递归、动态规划等。???? ???????? ???? 冲冲冲题目描述题目链接思路首先处理空格,处理非字母处理符号位循环计算返回代码class Solution {public: int myAtoi(string str) { int i=0; int len = str.s...原创 2020-04-03 11:31:22 · 162 阅读 · 0 评论 -
289. 生命游戏 原地数组解决
前言此题????解法还是想了一段时间,可以利用高4位来存储信息。为了方便代码使用16进制位操作记0x0000 4个字节,每个字节8位, 这表示一个int数据0x0001 生命游戏当前状态0x0010 倒数第二个8位为生命游戏下一个状态。当然也可以使用二进制 01、10题目描述题目链接思路伪代码遍历整个数组,判断8邻域内1的个数根据个数决定下一个状态。遍历数组转换下一个状态...原创 2020-04-02 10:53:40 · 202 阅读 · 0 评论 -
70. 爬楼梯
前言今天是一道很水的水题,爬楼梯。其实就是兔子题????题目描述题目链接思路这道题有很多解法1.递归2.dp3.优化dp O(n) 用临时变量保存前两次状态最后一次上楼梯只能是一阶或者两阶4.公式求解 O(logn) 代码1.优化dpclass Solution {public: int climbStairs(int n) { int first =...原创 2020-04-01 09:09:39 · 163 阅读 · 0 评论 -
912. 排序数组
前言今天的每日一题是排序,这是一个入门问题。有多种解法,当然最简单是直接调用sort方法进行排序,但是这对于练习并没有什么意义题目描述题目链接思路思路1:快排 。每一次划分pivot左边小于pivot右边大于pivot。递归划分左边,递归划分右边。代码class Solution {public: void quickSort(vector<int>&...原创 2020-03-31 10:34:09 · 132 阅读 · 0 评论 -
leetcode 1162 地图分析
前言今天这道题是一道简单的bfs。如果你对与bfs不是很了解,那么建议等待,后面出一期bfs。bfs伪代码,记住这个框架,刷题肯定会用到 ^o^!伪代码1.0:bfs整个树queue<T> buff;buff.push();while(!buff.empty()){ T temp = buff.front(); buff.pop(); ...原创 2020-03-29 11:33:23 · 310 阅读 · 0 评论 -
leetcode 820. 单词的压缩编码 效果对比
题目描述题目链接思路思路1 根据长度排序-->后向查找-->输出长度思路2 set去重,如果后缀出现则删除 。 注意 set 有序BST的时间复杂度都是O(Logn),但是unordered_set哈希表可以达到O(1),似乎在常见操作中我们都可以使用哈希表代码思路1 time 725ms 内存 13mbclass Solution {public:...原创 2020-03-28 20:42:52 · 279 阅读 · 0 评论 -
leetcode200 岛屿数量 一次ac递归
题目描述题目链接思路这道题与昨天的题目是同一个思路,能这么快ac还是因为昨天的基础,昨天博客leetcode 79单词搜索与小道面积 leetcode695 岛屿的最大面积 总结step 1 for循环遍历整个岛屿坐标step 2 对于每个坐标进行判断若为1则清楚周围面积的1,若是求面积则需要int ret 1 返回类型为intstep 3 编写dfs函数dfs函数负...原创 2020-03-26 09:23:25 · 149 阅读 · 0 评论 -
leetcode 79单词搜索与小道面积 leetcode695 岛屿的最大面积 总结
题目描述79 单词搜索思路相同点:主函数双重for循环搜索。递归函数上下左右四个方向搜索不同点: 单词搜索需要visit,判断是否访问,岛屿面积通过本身即是visit返回值岛屿面积为int数量,单词搜索是判断是否找到 思路相同单词搜索需要回溯代码岛屿面积class Solution {public: int maxAreaOfIsland(...原创 2020-03-25 10:27:05 · 154 阅读 · 0 评论 -
leetcode 401: 二进制手表
题目描述思路思路一:递归回溯 使用一个长度为10的数组进行组合编码,最终输出时间思路二:两重for循环分别代表小时和分钟代码class Solution {public: vector<string> readBinaryWatch(int num) { vector<string> ret; for(in...原创 2020-03-24 09:47:57 · 174 阅读 · 0 评论 -
leetcode 409最长回文串 双百写法
题目描述思路思路1->运用全排列进行判断 结果超时思路2:利用回文串特性,统计字符串中字符出现次数,将字符出现次数除以2 乘以2,此时统计了偶数次的字符,正好放两边,剩下奇数怎么办呢,只有第一个奇数字符才加1.例题:a 出现4次 b出现5次,那么答案4/2*2 + 5/2*2,最后加上1等于9,aabbbbbaa代码class Solution {p...原创 2020-03-19 11:35:53 · 218 阅读 · 0 评论 -
leetcode 47 rand7 实现rand10()
题目描述题目链接思路拒绝采样,通过多次采样进行分布计算。个人思路是采样10次,范围10~70;均匀分布,取余10 + 1,得到要求大神思路 概率拒绝采样1/2 * 1/5 , 通过两次采样来拒绝部分达到要求,最快。代码// The rand7() API is already defined for you.// int rand7();// @return a ...原创 2020-03-16 10:40:02 · 218 阅读 · 0 评论 -
leetcode 1 两数之和
题目描述思路1.直接两重for循环 O(n方)2.排序O(nlogn)3.hashmap前两种方法比较简单,第三种方法理解。map 存储 健为值 val为下标。每次便利时,使用count会查找前面每个数是否存在,相当于两重循环,但是map效率非常高所以使用map。代码class Solution {public: vector<int> ...原创 2020-03-15 13:48:47 · 160 阅读 · 0 评论 -
leetcode 958 二叉树的完全性检验(超简洁写法)
题目描述思路利用queue进行广度优先遍历。出队列时,如果遇到空值,则跳出,如果此时队列还有值,那么此数不是完全二叉树1 2 3 4 5 null 7 这是广度优先遍历 7 不少完全二叉树1 2 3 4 5 6 null 实例一为完全二叉树代码class Solution {public: bool isCompleteTree(TreeNode* ro...原创 2020-03-15 12:53:52 · 229 阅读 · 0 评论 -
leetcode 131 分割回文串 超简单做法
题目描述思路这道题与leetcode 300 最长上升子序列 简单易懂 动态规划解法 O(n^2)思路一致 解法一致都是子序列+剪枝问题。遇到这类问题首先思考,是否是排列组合问题。然后写出全排列组合写法。运用串s的长度来判断是否排列完,然后进行组合。代码class Solution {public: //存储最终结果 vector<vec...原创 2020-03-15 00:11:35 · 203 阅读 · 0 评论 -
leetcode 300 最长上升子序列 简单易懂 动态规划解法 O(n^2)
题目描述思路维护一个dpMax 表示以当前数字结尾的最长上升序列状态转移dpMax[i] = max(dpMax[i],dpMax[j]+1);注意!!!,在memset对内存进行填充时是以 字节 为单位所以 int类型一般memset只适用于0;代码class Solution {public: int lengthOfLIS(vector<int...原创 2020-03-14 10:44:54 · 154 阅读 · 0 评论 -
leetcode 93 复原ip地址 超简洁 c++
问题描述解题思路dfs 试探temp 2 -> 5 ->5 ->2 不合法数目未用完next step前面状态保留,试探2 5 5 252 5 5 255最终用完整个s后达到条件保存为temp代码class Solution {public: vector<string> res; vector<string> re...原创 2020-03-14 01:08:02 · 214 阅读 · 0 评论 -
leetcode 39. 组合总和
前言在做39题发现个有意思的事情,对于重复的排列数 去重问题通过对i的限制,可以防止i在递归时重新赋值为0思路1.全排列输出组合2.通过自减作为终止条件3.for循环为试探的数4.运用参数i去重去重前标准答案。class Solution {public: vector<vector<int>> res; ve...原创 2020-03-07 15:30:23 · 142 阅读 · 0 评论 -
前序遍历中序遍历重建二叉树 广度优先 深度优先输出二叉树
树的结构较为重要根据遍历重建二叉树考察对树的掌握程度原创 2020-02-19 09:57:46 · 221 阅读 · 0 评论 -
剑指offer 链表初始化
定义struct ListNode{ int m_nValue; ListNode* m_pNext;}; C++写法 包含值与next指针 由于指向自身,所以是自身类型链表增加函数void AddToTail(ListNode** pHead, int value){ ListNode *pNew = new ListNode(); pNew->m_nValue =...原创 2020-02-14 22:42:47 · 128 阅读 · 0 评论 -
c++ vector 容器
简要介绍容器 及其 容器的使用#include<vector>#include<iostream>#include<stdio.h>using namespace std; //向量比数组灵活,可以根据需要调整自己大小,可以容纳许多其他类型相同的元素,因此又被称做容器 void vectorInit(){ //向量的声明及初始化 vector&...原创 2020-02-07 23:07:47 · 160 阅读 · 0 评论 -
剑指offer:二维数组查找【每日一题】
描述在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。测试用例:1 2 8 92 4 9 124 7 10 136 8 11 15查找7输出 9,因为9 = 4*2+1 第三行第二列思路根据剔除行和列来进行查找,起点右上角或者左下角如果 该数字大于查找数字,则删除行...原创 2020-01-21 17:36:01 · 144 阅读 · 0 评论 -
【每日一题】滴滴原题:数组重组
描述给定一个数组 里面只有0跟1 然后把如果有0那么把0 变成2个,顺序不变,多出的位数 直接舍弃例子[1,0,1]=>[1,0,0][001010]=>[000010]时间复杂度 O(n) 空间复杂度O(n)思路利用新开一个数组,进行扫描遇到1,则填入1,遇到0则填入00。代码#include<stdio.h>int main(){ int ar...原创 2020-01-18 09:58:27 · 242 阅读 · 0 评论