自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NC7-买卖股票的最好时机

题目链接:买卖股票的最好时机_牛客题霸_牛客网 (nowcoder.com)思路分析:直接采用暴力法解决问题,其余的方法就是在此基础上进行问题的优化。首先我们用变量i表示买入股票的时间,用变量j表示卖出股票的时间,所以prices[j] - prices[i]表示的就是股票的收益,通过不断循环找出其中的最大值即可。具体实例分析:输入:[1,4,2],首先定义两个指针变量i和j,通过不断地计算max最大值来返回最终值的大小。python实现:## # @param price

2021-10-25 23:03:13 153

转载 NC2-重排链表-【链表】

题目链接:重排链表_牛客题霸_牛客网 (nowcoder.com)分三步:利用快慢指针,找到原链表的中点 将后半部分链表进行翻转 将反转之后的后半部分链表依次插入前半部分链表的间隔中。python实现:# class ListNode:# def __init__(self, x):# self.val = x# self.next = None## # @param head ListNode类 # @return voi.

2021-10-24 21:13:48 175

原创 NC54-数组中相加为0的三元组

题目描述给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c) 解集中不能包含重复的三元组。例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20)示例1输入复制[-2,0,1,1,2]返回值复制[[-2,0,2],[-2,1,1]]二、暴力法解法#i.

2021-03-01 17:46:32 193

原创 NC48-在转到过的有序数组中寻找目标值

一、题目给出一个转动过的有序数组,你事先不知道该数组转动了多少(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。假设数组中不存在重复项。示例1输入[1],0返回值-1示例2输入[3,2,1],1返回值2二、题解——暴力搜索class Solution {public: /** * * @param A int整型一

2021-03-01 16:39:26 161

原创 NC128-容器盛水问题-【双指针】

牛客题霸中的这道题目真的是没看懂问题,不知道示例中的输出是怎么计算的。故练习了leetcode中的“盛最多水的容器”!哔站图解过程class Solution {public: /** * max water * @param arr int整型vector the array * @return long长整型 */ long long maxWater(vector<int>& arr) { // w

2021-03-01 10:40:26 104

原创 NC17-最长回文子串-【动态规划】

一、题目对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1输入复制"abc1234321ab",12返回值复制7class Solution {public: int getLongestPalindrome(string A, int n) { // write code here if(n == 0) return 0; int

2021-03-01 09:46:00 637

原创 NC141-判断回文-【字符串、双指针】

一、题目给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。示例1输入"absba"返回true二、题解class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param str string字符串 待判断的字符串 * @return bool布尔型 */ bool judge(st

2021-02-26 15:02:40 379

原创 NC91-最长递增子序列-[动态规划、贪心]

一、题目给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)示例1输入复制[2,1,5,3,6,4,8,9,7]返回值复制[1,3,4,8,9]示例2输入[1,2,8,6,4]返回值[1,2,4]说明其最长递增子序列有3个,(1,2,8)、(1,2,6)、(1,2,4)其中第三个字典序最小,故答案为(1,2,4)二、题解:这里记录下别人的方法解析#include <ve

2021-02-26 10:31:24 868

原创 NC12-重建二叉树

一、题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。示例1输入[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]返回值{1,2,5,3,4,6,7}二、题解结合哔站图示分析理解以下代码/** * Definition for binary tree * stru

2021-02-25 11:31:10 280

原创 NC38-螺旋矩阵

一、题目给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。示例1输入[[1,2,3],[4,5,6],[7,8,9]]返回值[1,2,3,6,9,8,7,4,5]二、题解先考虑矩阵为方阵的情况(m==n),定义边界值:left,right,top,bottom,遍历方向(从左向右、从上向下、从右向左、从下向上)然后考虑特殊情况,如矩阵为空,矩阵为以下两种case,需要加条件限定,否则输出结果不对case1:1 2 3 ...

2021-02-25 10:24:26 335

原创 NC14-二叉树的之字形遍历-【树的层次遍历】

一、题目给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)二、题解思路同二叉树的层次遍历,借助队列实现j,只是多了对树深度的奇偶判断和处理,哔站详细讲解/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * .

2021-02-24 22:31:18 169

原创 NC1-大数加法-【字符串、栈】

一、题目以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成二、题解思路同NC40-两个链表生成相加链表的做法代码段长但思路清晰简单class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 *

2021-02-24 16:30:47 264

原创 2021-02-22

一、题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)示例1输入:"abcd"返回:"dcba"二、题解利用双指针,分别从首、尾遍历字符串,实现字符的互换。class Solution {public: /** * 反转字符串 * @param str string字符串 * @return string字符串 */ string solve(string

2021-02-22 14:23:23 59

原创 NC102-最近公共祖先-【树、dfs】

一、题目描述给定一棵二叉树以及这棵树上的两个节点 o1和o2,请找到 o1和o2的最近公共祖先节点。示例1[3,5,1,6,2,0,8,#,#,7,4],5,1返回3二、题解dfs深度遍历最近公共祖先和o1,o2有三种关系:o1,o2分别在祖先左右两侧 祖先是o1,o2在祖先左/右侧 祖先是o2,o1在祖先左/右侧使用dfs深度遍历,如果节点为o1,o2中其中一个直接返回,如果节点超过叶子节点也返回/** * struct TreeNode...

2021-02-22 14:12:11 128

原创 NC40-两个链表生成相加链表

一、题目假设链表中每一个节点的值都在 0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1为 9->3->7,链表 2为 6->3,最后生成新的结果链表为 1->0->0->0。二、题解采用栈先进后出的特点计算每一位的累加和S1:先将两个链表分别入栈;S2:取栈顶元素做加法,结果存入当前节点;S3:构建新链表的链接关系。 stack<int>...

2021-02-22 11:17:52 245

原创 NC127-最长公共子串-【动态规划】

一、题目给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。示例1"1AB2345CD","12345EF"返回:"2345"二、题解哔站动态规划思路详细讲解class Solution {public: /** * longest common substring * @param str1 string字符串 the string * @param str2 string字

2021-02-21 21:44:46 220

原创 NC53-删除链表的倒数第n个节点

一、题目给定一个链表,删除链表的倒数第n个节点并返回链表的头指针例如, 给出的链表为:1->2->3->4->5, n= 2. 删除了链表的倒数第n个节点之后,链表变为1->2->3->5.二、题解S1:考虑链表中只有一个节点,而头节点可能被删除的情况,创建虚拟头节点,让它指向链表的头节点;S2:定义三个变量p1,p2,prep2,初始化时都指向虚拟头节点;S3:先让p1走n步,然后p1,p2同时走。preP2始终记录p2的前面一个节点

2021-02-21 18:04:34 138

原创 NC52-括号序列-[栈]

一 题目给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法二 题解借助栈实现S1:遍历字符串, 遇到左括号, 将对应的右括号压入栈;S2:遇到右括号,将栈顶元素与当前字符比较,如果不匹配,则不合法,否则继续遍历字符串(前提是在没有遍历完字符串时,栈不为空,若为空则不合法)S3:遍历完字符串后,判断栈是否为空,若不为空,则

2021-02-20 21:37:15 400

原创 NC3-链表中环的入口节点

一 题目对于一个给定的链表,返回环的入口节点,如果没有环,返回null/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {private: int nodeNum; public:

2021-02-20 20:27:10 273

原创 NC22-合并两个有序的数组-[排序]

一 题目A和B是两个有序数组,假设A数组有足够的空间存放B数组的元素,现将B数组元素合并到数组A中,使合并得到的A数组仍然有序class Solution {public: void puppleSort(int AB[],int mn) {//冒泡排序 int i,j,temp; for(i=0;i<mn-1;i++){ for(j=i+1;j<mn;j++){ if(AB[i]

2021-02-20 16:43:42 196

原创 NC105-二分查找

一 题目请实现有重复数字的升序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。示例1输入:5,4,[1,2,4,4,5]返回:3输出位置从1开始计算class Solution {public: /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 查找值 * @param a int整型vector 有序数组 * @.

2021-02-20 16:25:34 102

原创 NC41-最长无重复子串-【set、双指针】

哔站详细讲解一、题目给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。示例1输入:[2,3,4,5]返回:4示例2输入:[2,2,3,4,3]返回:3class Solution {public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector&lt..

2021-02-19 14:43:11 224

原创 NC19-子数组的最大累加和问题-【分治、动态规划】

bi站详细讲解一、题目给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.题目保证没有全为负数的数据示例1输入[1, -2, 3, 5, -2, 6, -1]返回值12二、题解S1:定义一个大小与arr相同的数组dp,其中dp[i]的值代表到第i位的时候,以arr[i]结尾的连续子数组的最大累加和;S2:计算dp[i]的值。当

2021-02-19 11:04:14 228

原创 NC61-两数之和-【数组】

一、题目给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2二、题解:暴力搜索class Solution {public: /** * * @param.

2021-02-19 09:50:40 263

原创 NC33-合并有序链表

哔站详细讲解:动态图解及代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ ListNode* mergeTwoLists(ListNod

2021-02-18 13:39:38 245

原创 NC88-寻找第K大

class Solution {public: int findKth(vector<int> a, int n, int K) { // write code here sort(a.begin(), a.end()); int time = 0,res; for(int i=(n-1);i>=0;i--){ time++; if(K == time) res = .

2021-02-18 11:19:54 230

原创 NC15-二叉树的层序遍历-【二叉树】

哔站详细讲解:二叉树的层序遍历——队列解法思路详细讲解/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 * @return int整型vector<vector<>>

2021-02-18 11:04:38 95

原创 NC45-实现二叉树的先序、中序和后序遍历

题目描述分别按照二叉树先序,中序和后序打印所有的节点。示例1输入{1,2,3}返回值[[1,2,3],[2,1,3],[2,3,1]]题解:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {private: vector<int> pre,mid,post; p

2021-02-04 22:44:16 147

原创 NC4-判断链表中是否有环-【链表】

判断给定的链表中是否有环。如果有环则返回true,否则返回false。题解:使用快慢指针,慢指针每次向前走一步,快指针走两步,如果两个指针相遇,则存在环,且相遇的节点一定在环中。需要注意快指针不能一次性走两步,每走一步要判断是否为NULL/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val

2021-02-03 23:52:56 93

原创 NC140-排序-【数组】

题目描述给定一个数组,请你编写一个函数,返回该数组排序后的形式。示例1输入[5,2,3,1,4]返回值[1,2,3,4,5]题解:试了冒泡排序和选择排序两种算法,都超时。 int arr[5] = { 5,2,3,1,4 }; //冒泡排序 for (int i = 0; i < 5 - 1; i++) { for (int j = 0; j < 5 - i - 1; j++) { if (arr[j] > arr[j + 1]) {

2021-02-03 22:11:21 354

原创 CM66——最小调整有序

一题目给定一个int整数数组A及其大小n,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,即找出符合条件的最短序列。请返回一个二元组,元组的两个元素分别代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。要求A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:[2,3]二题解class Rearrange {public: vector<int> f

2021-01-14 09:48:58 437

原创 CM62-井字棋-【数组】

一 题目描述给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。测试样例:[[1,0,1],[1,-1,-1],[1,-1,0]]返回:true二 题解://扩展到N阶的棋盘同样适用;class Board {public: bool checkWon(vector<vector<int> > boa

2020-11-07 13:30:09 293

原创 CM7-清除行列-【数组】

一 题目描述输入一个NxN矩阵,如果某个元素值为0,则将该行、该列元素值置0,最后输出该矩阵测试用例:输入[[1,2,3],[0,1,2],[0,0,1]]输出:[[0,0,3],[0,0,0],[0,0,0]]二 题解class Clearer {public: vector<vector<int> > clearZero(vector<vector<int> > mat, int n) { vector&lt

2020-11-06 16:02:47 99

原创 CM6-像素翻转-【数组】

一 题目描述现有一个NxN的矩阵,阶数为N,请编写一个算法将矩阵顺时针旋转90度并将其作为返回值。要求不使用缓存矩阵,保证N不大于500,元素不大于256,每个元素用int表示。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3返回:[[7,4,1],[8,5,2],[9,6,3]]二 题解 :直接找规律转换class Transform {public: vector<vector<int> > transformImage(v..

2020-11-06 15:03:45 105

原创 STL中queue的基本用法

队列,先进先出;头文件#include<queue>1、创建queue变量示例queue<string> q;2、queue的基本用法入队 push出队 pop取队头元素 front取队尾元素 back判断队是否为空 empty计算队中元素个数 size实例:题目描述 给定一个string数组dic及数组大小n,同时给定字典中的两个字符串串s和串t,为将s变到t,每次可以改变s中的任意一个字符,请返回由s到t变换所需的最少步数.

2020-10-30 15:55:28 624

原创 CM80-字符串变换-【字符串】

一 题目题目描述 给定一个string数组dic及数组大小n,同时给定字典中的两个字符串串s和串t,为将s变到t,每次可以改变s中的任意一个字符,请返回由s到t变换所需的最少步数。同时需要满足在变换过程中的每个串都是字典中的串。若无法变换到t则返回-1。保证字符串长度均小于等于10,字典中字符串数量小于等于500。测试样例: ["abc","adc","bdc","aaa”],4,”abc","bdc"返回:2二 题解class Change {public: /* 检查..

2020-10-30 15:46:58 221

原创 CM78-字串判断-【字符串】

一 题目描述题目描述 给定一个string数组p及其大小n,同时给定长字符串string s,请返回一个bool数组,元素为true或false对应p中的对应字符串是否为s的子串。要求p中的串长度小于等于8,且p中的串的个数小于等于500,同时要求s的长度小于等于1000。测试样例: ["a","b","c","d"],4,"abc"返回:[true,true,true,false]二 题解利用字符串的find的函数查找class Substr {public: ve..

2020-10-29 11:35:02 397

原创 C++ string库常用函数

1、 A.find(B)函数查找字符串A中是否存在字符串B,如果存在,返回下标,否则返回-12、A.erase(i,n)函数在字符串A中删除从位置i开始的n个字符3、A.empty()函数判断字符串A是否为空,是返回1,否则返回04、A.size()函数计算字符串的长度应用实例:class LongestString {public: void printstr(vector<string> str, int n) { for (int i = 0

2020-10-29 10:37:35 922

原创 CM77-最长合成字符串-【字符串】

一 题目描述给定一个string数组str及其大小n。请编写一段代码找出该数组中最长的那个字符串,且要求该字符串能由数组中其他的字符串组成(使用的字符串可重复)。请返回满足要求的最长字符串的长度,保证题意所述的最长单词存在。测试样例: ["a","b","c","ab","bc","abc"],6返回:3二 题解先将字符串数组根据字符串长度进行递减排序,然后遍历字符串数组,对当前字符串首先判断其是否能由数组中其它字符串组成,如果能,返回当前字符串长度,不能返回-1。class...

2020-10-28 21:05:24 472

原创 CM76-单词最近距离-【字符串】

一 题目描述给定一个string数组article(由单词构成)和数组中元素的个数n,同时给定数组中的两个单词x和y。请返回这两个单词的最短距离(比如两个单词分别在第1和第3个位置,则最短距离为2)。保证两个单词不相同且均在数组中出现,同时保证数组中单词数小于等于1000二 题解暴力法:class Distance {public: int getDistance(vector<string> article, int n, string x, string y) .

2020-10-28 19:59:25 138

空空如也

空空如也

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

TA关注的人

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