旺财的菜鸡篇
本类专栏里面的文章都是属于旺财计算机道路上的点点滴滴,虽然写的很菜,但是也舍不得删,留作纪念了吧~里面还是有一些值得读的文章呢~
「已注销」
红红火火恍恍惚惚晃晃悠悠
展开
-
数组----求数组中两数&的最大值
给定一组非负整数,找出不同下标的两个数,使他们的&是最大值,即i下标和j下标对应的A[i]&A[j]的值最大。题解:https://blog.csdn.net/Xu_JL1997/article/details/88735178转载 2021-04-09 14:30:57 · 379 阅读 · 0 评论 -
数组----旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0解法一:直接对其进行排序,输出下标为0的元素即可int minArray(vector<int>& numbers) { sort(n.原创 2021-04-05 11:10:06 · 73 阅读 · 0 评论 -
两个队列实现一个栈
两个队列实现一个栈的主要思想在于:在任意时刻我们都需要保证一个队列是空的,因此我们可以固定队列2在任何时刻都为空。代码如下:(参考力扣官网题解)class MyStack{public: queue<int> queue1; queue<int> queue2; //Initialize your data structure here. MyStack() { } // Push element x onto stack. void push.原创 2021-04-02 10:03:51 · 161 阅读 · 0 评论 -
两个栈实现一个队列
栈是一种先进后出的结构,队列是先进先出结构下面模拟两个栈实现一个队列的过程先将a,b,c三个元素压入stack1中,此时stack2为空进行堆头删除操作,a先进去的需要将a先删除,由于a在栈底,所以我们将stack1中的元素全部出栈到stack2中,然后再将stack2中的栈顶元素出栈。继续删除队头元素,stack2不为空,因此继续从stack2中出栈插入元素d,直接将元素插入stack1中继续删除队头元素,由于stack2不为空,继续从stack2中出栈。继续删除元素d,由于s.原创 2021-04-02 09:20:18 · 137 阅读 · 1 评论 -
面试题8:指向下一个节点的节点
给定一颗二叉树和其中的一个节点,如何找出中序遍历的下一个节点?树中的节点除了两个分别指向左右子节点的指针,还有一个指向父节点的指针。如下面这颗二叉树:思路:找出中序遍历中某个节点的下一个节点大概有三种情况如果该节点有右子树,那么它的下一个节点就是它右子树中的最左子节点。如果该节点没有右子树,并且它是它父节点的左子节点,那么它的父节点就是该节点的下一个节点。如果该节点没有右子树,并且它是父节点的右子节点的话,那么我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点.原创 2021-03-30 15:36:56 · 318 阅读 · 0 评论 -
面试题7:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:思路:先从中序序列中找出根节点所在的位置,然后该位置左边的是根节点的左子树,根节点右边的序列是根节点的右子树。//在中序序列中寻找根节点的位置int findpos(int* inorder, int inorderSize, in.原创 2021-03-30 10:40:02 · 60 阅读 · 0 评论 -
计算机网络基础(三)
什么是数据?数据分为模拟数据和数字数据什么是信息?以某种格式组织起来的数据什么是信号?是数据的具体物理表现分为模拟信号和数字信号区别:模拟信号是连续的,数字信号是离散的什么是信道?传输信息时信号沿发送端到到接收端的通路。通信和数据通信?通信是数据的传输与交换数据通信是以传送数据为业务的通信数据通信网?是数据通信系统的网络形式码元和码字?码元是一个信号编码单元码字是由若干码元组成的字符串序列数据分组?数据分组就.原创 2021-03-28 15:41:02 · 167 阅读 · 0 评论 -
数组----二维数组中的查找
在一个 n * m的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target = 5,返回 true。.原创 2021-03-27 18:27:26 · 110 阅读 · 0 评论 -
计算机网络基础(二)
常见的网络体系结构OSI/RMTCP/IPIEEE 802OSI七层模型物理层数据链路层网络层传输层会话层表示层应用层TCP/IP四层模型网络层接口网络层传输层应用层OSI/RM数据封装过程实际传输通路中是七个层的head和发送进程所要发送的数据。数据传输过程...原创 2021-03-27 16:26:22 · 170 阅读 · 0 评论 -
数组----数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3]输出:2 或 3解法一:排序之后,通过判断相邻两个元素是否相等找出重复元素。int findRepeatNumber(vector<int>& nums){ sort(nums.begin(), .原创 2021-03-27 11:20:42 · 152 阅读 · 0 评论 -
字符串----第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例1s = “abaccdeff”返回 “b”示例2s = “”返回 " "解法:哈希表char firstUniqChar(string s){ unordered_map<int, int> counts; for (auto& x : s) { counts[x]++; } for (auto& x : s) { if (count.原创 2021-03-26 17:50:46 · 59 阅读 · 0 评论 -
计算机网络基础(一)
计算机网络的分类按覆盖范围分为:WAN,LAN,MAN,PAN按通信速率分为:低速网,中速网,高速网按带宽分为:基带网络,宽带网络按网络协议分类按网络操作系统分类计算机网络的组成通信子网:提供网络通信功能,能完成网络主机之间的数据传输、交换、通信控制和信号变换等通信处理工作,由通信控制处理机CCP、通信线路和其他通信设备组成的数据通信系统。资源子网:为用户提供了访问网络的能力,它由主机系统、终端控制器、请求服务的用户终端、通信子网的接口设备、通信共享的软件资源和数据资源(如数据.原创 2021-03-26 16:21:19 · 196 阅读 · 0 评论 -
数组----平均等待时间
有一个餐厅,只有一位厨师。你有一个顾客数组 customers ,其中 customers[i] = [arrivali, timei]:arrivali 是第 i 位顾客到达的时间,到达时间按 非递减 顺序排列。timei 是给第 i 位顾客做菜需要的时间。当一位顾客到达时,他将他的订单给厨师,厨师一旦空闲的时候就开始做这位顾客的菜。每位顾客会一直等待到厨师完成他的订单。厨师同时只能做一个人的订单。厨师会严格按照订单给他的顺序做菜。请你返回所有顾客需要等待的 平均 时间。与标准答案误差在 1.原创 2021-03-24 08:50:17 · 255 阅读 · 0 评论 -
数组----删除最短的子数组使剩余数组有序
给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是 非递减 的。一个子数组指的是原数组中连续的一个子序列。请你返回满足题目要求的最短子数组的长度。示例 1:输入:arr = [1,2,3,10,4,2,3,5]输出:3解释:我们需要删除的最短子数组是 [10,4,2] ,长度为 3 。剩余元素形成非递减数组 [1,2,3,3,5] 。 另一个正确的解为删除子数组 [3,10,4] 。示例 2:输入:arr = [5,4,3,2,1]输出:4解.原创 2021-03-24 09:16:36 · 665 阅读 · 1 评论 -
数组----螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]思路:按照四个方向依次遍历:从左向右,从上向下,从右向左,从下向上。vector<int> spiral.原创 2021-03-15 09:44:34 · 68 阅读 · 0 评论 -
字符串----上升下降字符串
给你一个字符串 s ,请你根据下面的算法重新构造字符串:1.从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。 2.从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在结果字符串后面。3. 重复步骤 2 ,直到你没法从 s 中选择字符。4. 从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。 5.从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。6. 重复步骤 5 ,直到你没法从 s 中选择字符。7.重复.原创 2021-03-15 08:52:36 · 133 阅读 · 0 评论 -
数组----数组中出现的次数
题目1:一个整型数组 nums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]题目2:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums =原创 2021-03-10 21:39:15 · 278 阅读 · 0 评论 -
字符串----计算器
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。示例 1:输入:s = “1 + 1”输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23提示:1 <= s.length <= 3 * 105s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成s 表示一个有效的表达式解法:由于只有加减法,所以可以把括号全都展开来写,例如 2 - (1 - 3.原创 2021-03-10 09:39:56 · 1320 阅读 · 0 评论 -
数组----寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2+ 3) / 2 = 2.5示例 3:输入:nums1 = [0,0].原创 2021-03-09 21:54:08 · 114 阅读 · 0 评论 -
字符串----重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False示例 3:输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)...原创 2021-03-09 20:56:54 · 230 阅读 · 0 评论 -
字符串----删除字符串中所有相邻的重复项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb”,由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa”,可以执行重复项删除操作,所以最后的字符串为 “ca”。使用栈解决.原创 2021-03-09 15:26:47 · 289 阅读 · 0 评论 -
数组----主要元素
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2:输入:[3,2]输出:-1示例 3:输入:[2,2,1,1,1,2,2]输出:2题解一:用unordered_map解决。int majorityElement(vector<int>& nums) { unordered_map<int, int> counts; .原创 2021-03-08 21:29:58 · 307 阅读 · 0 评论 -
数组----转置矩阵
给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]题解:假设原矩阵为m行n列,我们先可以先将一个n行m列的二维数组全部初始化为0,然后将原.转载 2021-03-08 21:01:48 · 502 阅读 · 0 评论 -
重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解法一:用栈和队列解决将链表前一半结点放在队列中.原创 2021-03-06 17:29:23 · 161 阅读 · 0 评论 -
八大排序算法
冒泡排序时间复杂度O(n^2),空间复杂度O(1),稳定void BubbleSort(int* arr, int len){ for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); } } }}选择排序选择排序就是找到.原创 2021-03-06 16:02:19 · 84 阅读 · 0 评论 -
智能指针----auto_ptr
c++中的auto_ptr所做的事情就是解决指针没有被释放而导致内存泄漏的问题。有了auto_ptr之后程序员就不用去操心当对象被销毁时释放资源的问题了。裸指针存在的问题:auto_ptr源码:template <class _Ty> class auto_ptr { private: bool _Owns;//指针的拥有权 _Ty* _Ptr; public: auto_ptr(_Ty* p = 0) :_Owns(p != nullptr), _Ptr(p)原创 2021-02-19 21:18:59 · 101 阅读 · 1 评论 -
数组----最大数最小数
题目来源给定一组非负整数 nums,重新排列它们每个数字的顺(每个数字不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”示例 4:输入:nums = [10]输出:“10”核心思想:如果字符串a+字符串b>字符串b+字符原创 2021-02-19 14:47:10 · 201 阅读 · 1 评论 -
数组----有序数组的平方
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100], 排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums =原创 2021-02-18 20:02:43 · 248 阅读 · 0 评论 -
数组----合并两个有序数组
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-sorted-array给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m +n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0原创 2021-02-17 17:13:58 · 76 阅读 · 0 评论 -
剑指 offer 50.第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "解法一:哈希实现:code:char firstUniqChar(string s){ unordered_map<int, int> counts; for (char x : s) { counts[x]++; } for (int i = 0; i < s.size(); i++.原创 2021-02-14 13:59:35 · 49 阅读 · 0 评论 -
力扣 448. 找到所有数组中消失的数字
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入: [4原创 2021-02-14 14:00:20 · 134 阅读 · 0 评论 -
c++实现简单的学生管理系统
这个学生管理系统能够完成对学生的增删改查。原创 2021-02-14 13:59:01 · 1156 阅读 · 0 评论 -
STL & vector的基本使用
vector是向量,相当于C语言中的数组,同样的在对vector进行一系列的操作之前要添加vector这个库:#include <vector>vector的在小白现阶段的使用大概就这些,更多的可以查看c++帮助手册~int main(){ vector<int> vec = { 1,2,4,3,2,1,6 }; int n = vec.size();//计算向量的长度 for (int i = 0; i < n; i++) { cout <<原创 2021-02-06 17:43:20 · 68 阅读 · 0 评论 -
STL & string的基本使用
首先来看string字符串的使用:int main(){ string s1("wanghello"); string s2 = "helloworld"; string s3, s4, s5,s6; s3 = s1 + s2; s4 = s1 + "lili"; s5 = "lili" + s2; s6="lili"+"hello";//error cout << s1 << endl; cout << s2 << endl; cou原创 2021-02-06 17:12:37 · 61 阅读 · 0 评论 -
剑指 offer 53.在排序数组中查找数字
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6 输出: 0解法一:简单暴力,直接循环int search(int* nums, i原创 2021-02-05 23:01:42 · 168 阅读 · 0 评论 -
剑指offer 53 -||. 0~n-1中缺失的数字
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8解法一:将整个数组遍历一遍,然后将前面一个元素的值加一看是否和后面一原创 2021-02-05 18:22:01 · 93 阅读 · 0 评论 -
c++ &模板
template <typename T>//template <class T>const T Max(const T& a, const T& b){ return a > b ? a : b;}int main(){ //在编译的过程中根据实参推演出函数模板 int a = Max(12, 23); /* typedef int T; const T Max(const T & a, const T & b)原创 2021-02-06 14:33:18 · 82 阅读 · 0 评论 -
c++ &字符串的赋值
先来设计一个String这个类:class String{private: char* str;public: String(const char* s) { if (s != nullptr) { int len = strlen(s) + 1; str = new char[len]; strcpy_s(str, len, s); } else { str = new char[1]; *str = '\0'; } } //取地址的原创 2021-02-05 13:23:28 · 1200 阅读 · 0 评论 -
剑指offer 06:从尾到头打印单链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2] 输出:[2,3,1]单链表结构如下:struct ListNode { int val; struct ListNode *next; };解法一:时间复杂度和空间复杂度都为O(n)。不用修改链表的结构。先计算出链表中的结点个数,然后开辟一个和链表节点个数相同的数组空间,将链表中每个结点的数据域的值放到数组中然后再将数组的地址返回即可。C语言代码如下.原创 2021-02-03 17:40:14 · 165 阅读 · 0 评论 -
力扣888.公平的糖果棒交换
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fair-candy-swap爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交原创 2021-02-01 18:14:55 · 134 阅读 · 0 评论