![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
逻辑算法相关
无
Ember_Sky
这个作者很懒,什么都没留下…
展开
-
数组右移
题目描述拥有n个整数的数组a,下标为0,1···n-1,现将整个数组整体右移k位,求移动后的数组,以函数实现要求请尽量使用最小的额外空间和算法复杂度示例a={1,2,3,4,5,6,7},右移3位,a={5,6,7,1,2,3,4}解题思路将{1,2,3,4}翻转a={4,3,2,1,5,6,7}将{5,6,7}翻转a={4,3,2,1,7,6,5}将{4,3,2,1,7,...原创 2020-05-07 10:41:09 · 332 阅读 · 0 评论 -
进制转换
进制转换题目描述:(这是excel中列号的表达方式)按照以上规则,将数字转换成字符串,保证输入有效。乍一看很简单,但是实际操作的时候并没有那么容易,因为他没有 0 的情况。思路:先按照26进制转换,转换之后,将 0 的这种情况换成Z,同时前一位减一代码:string num2str(int n) { string ans; char it = 'A' - 1; while (n) { ans = (char)(n % 26 + it) + ans; n /= 2原创 2020-09-15 19:59:23 · 57 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字题目大意: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。力扣提交测试链接思路:异或运算的特点:两个相同的数字异或之后等于零所以,直接将所有的数字异或一下,出现两次的数字就会被消掉,剩下的就是出现一次的数字class Solution {public: int singleNumber(vector<int>& nums) { int ans=0; for(a原创 2020-09-07 21:37:30 · 84 阅读 · 0 评论 -
找出拥有n个元素的数组中出现次数大于n/2的元素
找出拥有n个元素的数组中出现次数大于n/2的元素转自大佬博客思路:采用两两抵消的方法,设置一个计数器count。首先令temp等于第一次元素,count为1,如果下一个元素和temp相等,则count++,如果不相等,则count–。如果count等于0,那么temp重新赋值为下一个元素重复上面的步骤直到遍历完数组,则剩下的temp一定是数组中出现次数大于n/2的元素。提交测试链接class Solution {public: int majorityElement(vecto原创 2020-09-07 21:00:53 · 1639 阅读 · 0 评论 -
求连续子数组的最大和
连续子数组的最大和转载自大神博客基本思路:对于数组中的一个数A若是A的左边累计数非负,那么加上A能使得值不小于A,认为累计值对整体和是有贡献的。如果前几项累计值负数,则认为有害于总和,sum 记录当前值。此时 若和大于 ans, 则用 ans 记录下来测试提交链接class Solution {public: int FindGreatestSumOfSubArray(vector<int> s) { if (s.empty()) return 0;原创 2020-09-06 19:50:45 · 71 阅读 · 0 评论 -
C++简单实现LRU缓存结构
C++简单实现LRU缓存结构简单了解一下(个人解释)LRU缓存结构:有一个池子,有一堆数据,池子的容纳上限是k,有两种操作set:放数据(如果超出上限了,删除最晚访问的那条数据)get:访问数据牛客网代码提交的链接这里有个要求:get、set的时间复杂度都需要是O(1)推理过程:先考虑一下我们需要什么样的功能访问时候为1,插入删除时为1,这样的话,没有一个数据结构是可以同时符合这种特征的但是我们可以将两种结构结合在一起,达到需要的效果使用链表方便插入和删除,使用map解决链原创 2020-09-01 12:09:34 · 517 阅读 · 0 评论 -
海量数据随机选取
海量数据随机选取转自更详细的大神博客问题1:在不知道文件总行数的情况下,如何从文件中随机的抽取一行,并且每行被抽中的概率相等?问题2:在不知道文件总行数的情况下,如何从文件中随机的抽取 k 行,并且每行被抽中的概率相等?问题一:抽取一行在知道文件行数的情况下,直接用 rand 函数就可以不知道文件行数的时候,我们需要一个概念来使得对每一行取出的概率相等,也即随机。这个概念即蓄水池抽样解决方案:直接选取第一行作为我们的最后选择:choice1/2 的概率,将choice换成第二行1/3原创 2020-08-24 16:55:38 · 773 阅读 · 0 评论 -
非递归实现全排列
非递归实现全排列要求:使用非递归的方法按照字典序输出全排列思路:不让递归的话,只能通过上一个排列通过特殊的方法推算出来下一个排列这次以“1 5 4 3 2”为例,下一个排列是“2 1 3 4 5”从后往前找,找到第一个连续递增的两个数字,找到了“1 5”重新从后往前找,找到第一个大于“1”的数字,找到了“2”,“1”就是步骤三中找到的第一个数字找到“2”之后,将“1”和“2”互换,换成了“2 5 4 3 1”然后将“5”后面的全部数字翻转(包括“5”),“5”就是步骤三找到的第二个数字,变原创 2020-08-24 11:49:01 · 1619 阅读 · 0 评论 -
交换两个数的四种方法
交换两个数的四种方法转大神博客先设置两个数,再交换。#include<stdio.h>int main(){ int a = 5; int b = 6; int c; c = a; a = b; b = c; printf("a=%d\tb=%d", a, b);}接下来是不使用中间变量第一种#include<stdio.h>int main(){ int a = 5; int b = 6; a = a + b;//将a中值先变更 b =原创 2020-08-23 21:04:42 · 221 阅读 · 0 评论 -
已知前中序遍历数组,求后序遍历数组
已知前中序遍历数组,求后序遍历数组要求不能通过创建树来实现看这个需要知道:通过前中序遍历怎么还原树,如果不知道,下面看懂应该很困难思路:先了解一下基本知识:DLR:前序(数组分布状况:D,LLL,RRRRR)LDR:中序(数组分布状况:LLL,D,RRRRR)LRD:后序(数组分布状况:LLL,RRRRR,D)遍历的时候分为三个部分:L:左子树(是一个部分,可能有多个元素,也可能有一个元素)D:当前节点(只可能是一个元素)R:右子树(同左子树)综上,我们可以看出,要想得到后序遍历原创 2020-08-23 19:11:22 · 468 阅读 · 0 评论 -
四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远
此类问题中心思想:先一起走走一段路程 s 之后,任选一辆车,把剩余的油全分给其余的车,加满重复步骤二,直到最后一辆车没油s的取值:s并不是随便定的,而是要符合一个条件:走完s之后,剩下的油要把其余的车全加满,并且不能有多余的。这个问题详细步骤:假设每辆车的汽油的容量是12L出发:四辆车的容量为:12L(0)、12L(0)、12L(0)、12L(0)将12L分为4份,每份为3L,其中一份自己用,前进一份油(3L)的路程四辆车的容量为:9L(1/4)、9L(1/4)、9L(1/4)、9原创 2020-08-22 17:09:13 · 4200 阅读 · 4 评论 -
八大数据结构
八大数据结构数组散列表(哈希表)链表栈队列堆树图原创 2020-08-22 16:02:08 · 84 阅读 · 0 评论