原创
文章平均质量分 86
拓跋阿秀
个人公众号『拓跋阿秀』,双非学历、字节全栈,专业写bug,我踩过的坑不希望你再踩,我走过的路希望你能照着走下来。
展开
-
最新全网精华分享(2022.06~~至今)计算机校招编程类
阿秀的学习圈」每周精华分享第二十一期(2022.11.21-2022.11.27)https://articles.zsxq.com/id_ajd18whgk926.html。「阿秀的学习圈」每周精华分享第二十二期(2022.11.27-2022.12.04)https://articles.zsxq.com/id_w6b9w1u9amw4.html。原创 2023-03-11 01:45:47 · 866 阅读 · 0 评论 -
NO9、变态跳台阶
9、变态跳台阶过,豁然开朗一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。示例1输入1|3返回值1|41、看了讲解豁然开朗因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n)=f(n-1)+f(n-2)+...+f(1)因为f(n-1)=f(n-2)+f(n-3)+...+f(1)所以f(n)=2*f(n-1)原创 2020-12-28 18:09:04 · 149 阅读 · 0 评论 -
吴恩达Machine Learning选择题解析及见解
第二周:归一化(normalization)公式:梯度下降与正规方程的选取原则原创 2018-10-19 22:03:11 · 772 阅读 · 0 评论 -
N01、二维数组中的查找(挺多方法的)
1、二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值true1、右上角逐渐逼近左下角 很好如果当前位置元素比target小,则row++如果当前位置元素比target大,则col–如果相等,返回true原创 2020-12-29 15:53:51 · 393 阅读 · 0 评论 -
N02、替换空格(这题很容易)
2、替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1、首先统计出长度,然后从后向前替换 void replaceSpace(char *str,int length) {//int length是指当前的长度 int spaceCount = 0; int totalLen = length; for(int i = 0; i <原创 2020-12-29 15:53:25 · 180 阅读 · 1 评论 -
N03、从尾到头打印链表(挺简单的)
3、从尾到头打印链表输入一个链表,按链表从尾到头的顺序返回一个ArrayList。示例1输入{67,0,24,58}返回值[58,24,0,67]1、这题也太简单了,从前向后保存,然后reverse不就可以了吗。。。运行时间:3ms 占用内存:504k vector<int> printListFromTailToHead(ListNode* head) { if( head == nullptr) return vector<int>(原创 2020-12-29 15:53:09 · 152 阅读 · 0 评论 -
N04、重建二叉树(给出前序中序,重建二叉树,好题 绝对的好题)
4、重建二叉树 (给出前序中序,重建二叉树) 好题 绝对的好题输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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}1、力扣上的一种解法需要首先熟悉二叉树先序遍历与中序遍历的规则。先找到preord原创 2020-12-29 15:52:29 · 177 阅读 · 0 评论 -
N05、用两个栈来实现一个队列 (很简单的一道题)
5、 用两个栈来实现一个队列 过完成队列的Push和Pop操作。 队列中的元素为int类型。1、很简单的一道题运行时间:3ms 占用内存:376kpublic: void push(int node) { stack1.push(node); } int pop() { while(stack1.size() != 1){ stack2.push(stack1.top()); stack1.p原创 2020-12-29 15:52:15 · 117 阅读 · 0 评论 -
NO6、旋转数组
6、旋转数组把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1输入[3,4,5,1,2]返回值11、常规做法 int minNumberInRotateArray(vector<int> rotateArray) { if (rotate原创 2020-12-29 15:51:58 · 119 阅读 · 0 评论 -
NO7、斐波那契数列(easy不需再刷)
7、斐波那契数列 easy不需再刷示例1输入4返回值31、采用三个元素保存数组即可 int Fibonacci(int n) { if (n == 1 || n == 2) return 1;//1、1、2、3、5、8、13、21、34 if (n == 3) return 2; vector<int> F(3); F[0] = 1; F[1] = 1; F[2] = 2; for (int i = 3; i < n; ++i) { F[i原创 2020-12-29 15:51:35 · 191 阅读 · 0 评论 -
NO8、跳台阶(过,很easy)
8、 跳台阶 过一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入1返回值1示例2输入4返回值51、递归做法,真的很耗时 int jumpFloor(int number) { if(number==1) return 1; if(number==2) return 2; return jumpFloor(number-1) + jumpFl原创 2020-12-28 18:09:25 · 133 阅读 · 0 评论 -
NO10、矩阵覆盖(这题还可以,可以再看一下)
10、矩阵覆盖 可以再看一下我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Km3Rn86j-1608626824231)(https://uploadfiles.nowcoder.com/images/20201219/872855282_1608369499253/3781FA1ACAB7A83972原创 2020-12-28 18:02:06 · 152 阅读 · 0 评论 -
NO11、二进制中1的个数(很好的题目)
11、二进制中1的个数 很好的题目输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入10返回值21、自己写的,错误的想法int NumberOf1(int n) { if (n == 0) return 0; if (n > 0) {//正数 int count = 0; while (n!=0) { if (n == 1) { return ++count; } if (n % 2 == 1) {原创 2020-12-28 18:00:16 · 173 阅读 · 0 评论 -
NO12、数值的整数次方(快速幂解法很棒、很好)
12、数值的整数次方 快速幂很好给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0示例1输入2,3返回值8.000001、主要要注意正负数的情况,要注意分开运行时间:3ms 占用内存:520k double Power(double base, int exponent) { if( exponent == 0) return 1.0; if(原创 2020-12-28 18:00:05 · 178 阅读 · 0 评论 -
NO13、调整数组顺序使奇数位于偶数前面(还不错、值得再看一遍)
13、调整数组顺序使奇数位于偶数前面 值得再看一遍输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。1、暴力解法,新开辟一个数组保存数据void reOrderArray(vector<int>& array) { vector<int> temp(array.size(), 0); int low = 0; for (int i = 0原创 2020-12-28 17:59:54 · 116 阅读 · 0 评论 -
NO14、链表中倒数第k个结点 (还可以)
14、 链表中倒数第k个结点 过,可以不再刷了输入一个链表,输出该链表中倒数第k个结点。示例1输入1,{1,2,3,4,5}返回值{5}1、比较简单的一种方法时间复杂度较高,没有二刷的那种方法好ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { int count=0; ListNode * node=pListHead; while(pListHead!=nu原创 2020-12-28 17:59:42 · 96 阅读 · 0 评论 -
NO15、反转链表(贼经典,建议多多刷,不开玩笑,要闭着眼睛写出来那种)
15、反转链表输入一个链表,反转链表后,输出新链表的表头。示例1输入{1,2,3}返回值{3,2,1}很好的解答https://blog.csdn.net/qq_42351880/article/details/886373871、头插法 很经典的做法啊struct ListNode { int val; struct ListNode* next; ListNode(int x) : val(x), next(NULL) { }}; ListNode* Rever原创 2020-12-28 17:59:29 · 146 阅读 · 1 评论 -
NO16、合并两个有序链表(经典题型,喜欢出变种题目)
16、合并两个有序链表 过,可以不再刷了示例1输入{1,3,5},{2,4,6}返回值{1,2,3,4,5,6}力扣上有类似的题目了1、常规做法,非递归花了好久才做出来struct ListNode { int val; struct ListNode* next; ListNode(int x) : val(x), next(NULL) { }}; ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {原创 2020-12-28 17:59:17 · 117 阅读 · 2 评论 -
NO17、树的子结构(挺好的题,值得再看一遍)
17、树的子结构 值得再看一遍输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入{8,8,#,9,#,2,#,5},{8,9,#,2}返回值true1、解析见力扣-14 树 - medium - 面试题26,讲得很好 bool HasSubtreeCore(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2==nullptr) return true; i原创 2020-12-28 17:59:02 · 94 阅读 · 0 评论 -
NO18、二叉树的镜像(经典,可以再过一遍)
18、二叉树的镜像 可以再过一遍操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \1、借助队列来做,跟上面一题中的迭代版本很像void Mirror(TreeNode* pRoot) { if (pRo原创 2020-12-26 16:28:18 · 150 阅读 · 0 评论 -
NO19、顺时针打印矩阵 (好题,值得再做一遍)
19、顺时针打印矩阵 好题,值得再做一遍输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.示例1输入[[1,2],[3,4]]返回值[1,2,4,3]1、有点难,在力扣上写了好久主要就是分析清楚上下左右的情况执行用时:20 ms, 在所有 C++ 提交中击败了87.5原创 2020-12-26 16:28:02 · 144 阅读 · 0 评论 -
NO20、包含min函数的栈(过,比较简单)
20、包含min函数的栈 过定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。1、一次解决 以前做过class Solution {public: void push(int value) { if(st.size()==0&&minSt.size()==0) { st.push(value); minSt.push(value); }else原创 2020-12-26 16:27:46 · 81 阅读 · 0 评论 -
NO21、栈的压入弹出序列(挺好的题目,可以帮助你理解栈)
21、栈的压入弹出序列 很好的题目题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入[1,2,3,4,5],[4,3,5,1,2]返回值false1、想岔了,用vector bool IsPopOrder(vect原创 2020-12-26 16:27:33 · 101 阅读 · 0 评论 -
NO22、从上往下打印二叉树(经典题目)
22、从上往下打印二叉树 过,经典题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入{5,4,#,3,#,2,#,1}返回值[5,4,3,2,1]1、迭代做法,借助队列,比较简单 vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> result; if (root == nullptr) return result; queue<TreeNode原创 2020-12-26 16:26:58 · 107 阅读 · 2 评论 -
NO23、二叉搜索树的后序遍历序列(好题,值得再看一遍)
23、二叉搜索树的后序遍历序列 好题,值得再看一遍从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入{5,4,#,3,#,2,#,1}返回值[5,4,3,2,1]1、递归写法,树主要的做法就是递归bool VerifySquenceOfBST(vector<int> sequence) { if (sequence.empty()) return false; if (sequence.size() == 1) return true; return原创 2020-12-26 16:26:41 · 105 阅读 · 0 评论 -
NO24、二叉树中和为某一值的路径(好难,哭了,值得再刷)
24、二叉树中和为某一值的路径 好难,哭了,值得再刷题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入{10,5,12,4,7},22返回值[[10,5,7],[10,12]]示例2输入{10,5,12,4,7},15返回值[]1、带有回溯性质的解法void FindPathCore(vector<vector<int>>&原创 2020-12-26 16:26:29 · 109 阅读 · 0 评论 -
NO25、复杂链表的复制 (好题,是真的好题,我做了N遍)
25、复杂链表的复制 好题,是好题不错题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)示例1输入{10,5,12,4,7},22返回值[[10,5,7],[10,12]]示例2输入{10,5,12,4,7},15返回值[]1、第一种方法,在节点后复制一个节点,然后再分离开这方法超级原创 2020-12-26 16:25:58 · 114 阅读 · 0 评论 -
NO26、二叉搜索树与双向链表(好题,值得再看一遍)
26、二叉搜索树与双向链表 好题,值得再看一遍输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。0、最笨的一种写法,这也是最容易理解的一种方法了中序遍历二叉树,然后用一个数组类保存遍历的结果,这样在数组中节点就按顺序保存了,然后再来修改指针,虽然没有一点技术含量,但是最后竟然还通过了 哈哈哈。。。TreeNode* Convert(TreeNode* pRootOfTree){ if (pRootOfTree == NULL) r原创 2020-12-26 16:23:21 · 127 阅读 · 0 评论 -
NO27、字符串的排列(经典题目,超级经典)
27、字符串的排列 经典题目,超级经典输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。示例1输入"ab"返回值["ab","ba"]1、一个很奇特的函数next_permutation返回全排列,使用方法如下所示,必须要进行排序才可以:执行用时:52 ms, 在所有 C++原创 2020-12-26 16:23:07 · 154 阅读 · 0 评论 -
NO28、数组中出现次数超过一半的数字(不难)
28、数组中出现次数超过一半的数字 可以再做一遍数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,2,5,4}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值21、常规做法,哈希表int MoreThanHalfNum_Solution(vector<int> numbers) { unordered_原创 2020-12-25 23:31:26 · 142 阅读 · 0 评论 -
NO29、最小的K个数(应该记住大顶堆和小顶堆的区别与联系,并不难)
29、最小的K个数 应该记住大顶堆和小顶堆的区别与联系,并不难输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]1、优先队列来做,最小,用大顶堆来做priority_queue<int,vector,less> vector<int> GetLeastNumbers_Solution(vector<int&原创 2020-12-25 23:31:12 · 372 阅读 · 0 评论 -
NO30、连续子数组的最大和(挺好的题)
30、连续子数组的最大和 过HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)示例1输入[1,-2,3,10,-原创 2020-12-25 23:31:00 · 99 阅读 · 0 评论 -
NO31、整数中1出现的次数( 从1 到 n 中1出现的次数 ) 好题,需要好好理解
31、整数中1出现的次数( 从1 到 n 中1出现的次数 ) 好题,需要好好理解求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。输入13返回值61、经典方法吗,真的想不到这种方法,我服了,背吧在力扣上是双百执行用时:0 ms原创 2020-12-25 23:30:47 · 212 阅读 · 0 评论 -
NO32、把数组排成最小的数(很好的一道题)
32、把数组排成最小的数 很好的一道题输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入[3,32,321]返回值"321323"1、很精妙绝伦的一种排序方法执行用时:12 ms, 在所有 C++ 提交中击败了92.42%的用户内存消耗:11.5 MB, 在所有 C++ 提交中击败了100.00%的用户 string minNumber(ve原创 2020-12-25 23:30:32 · 179 阅读 · 0 评论 -
NO33、第N个丑数(好题)
33、第N个丑数 好题示例1输入7返回值81、三指针法 很经典1-6之间都是丑数 1 2 3 4 5 6 直接返回即可维护三个index,采用三index齐头并进的做法。int GetUglyNumber_Solution(int index) { if(index < 7) return index; vector<int> result(index, 0); result[0] = 1; int indexTwo = 0, indexThree =原创 2020-12-25 23:30:12 · 161 阅读 · 0 评论 -
NO34、第一个只出现一次的字符(挺好的题目)
34、第一个只出现一次的字符 挺好的题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例1输入"google"返回值41、挺简单的,想多了 int FirstNotRepeatingChar(string str) { vector < int > result(58,0); for (int i = 0; i < str.s原创 2020-12-25 23:29:57 · 125 阅读 · 0 评论 -
NO35、数组中的逆排序(建议再刷)
35、数组中的逆排序 很好的题目,建议再刷在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<=2*10^5示例1输入1,2,3,4,5,6,7,0输出7原创 2020-12-25 23:29:44 · 320 阅读 · 1 评论 -
NO36、返回两个链表中的第一个公共节点(一道可以二刷的题)
36、返回两个链表中的第一个公共节点 可以二刷输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)1、暴力遍历法ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == NULL || pHead2 == NULL) return NULL; ListNode* node = (ListNode*)malloc(s原创 2020-12-25 23:29:30 · 160 阅读 · 0 评论 -
NO37、 统计一个数字在排序数组中出现的次数(还可以)
37、 统计一个数字在排序数组中出现的次数 还可以统计一个数字在升序数组中出现的次数。示例1输入[1,2,3,3,3,3,4,5],3返回值41、STL中取巧的一种写法,直接调equal_range() 方法 int GetNumberOfK(vector<int> data ,int k) { auto pos = equal_range(data.begin(),data.end(),k); return pos.原创 2020-12-25 23:29:14 · 127 阅读 · 0 评论 -
NO38、二叉树的深度(不咋难)
38、二叉树的深度 过输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入{1,2,3,4,5,#,6,#,#,7}返回值41、BFS,迭代版本int TreeDepth(TreeNode* pRoot){ if (pRoot == nullptr) return 0; queue<pair<TreeNode*, int>> q; q.push(make_pair(pRoot,原创 2020-12-24 16:31:22 · 110 阅读 · 0 评论