C++
ocean star
这个作者很懒,什么都没留下…
展开
-
C/C++:求最长连续数组。
###题目:给定一个数组,求该数组中最长的连续子数组eg:a[7]={1,2,3,4,5,7,8,} 返回5####分析:如果依次找出所有连续子数组其时间复杂度就会较高,所以对于数组问题我们优先考虑时间复杂度为O(n)的方法。分析如下:①:依次遍历每个数值,如果该数值为前一个数值+1,则代表连续,使用临时变量+1即可。②:当碰到不连续的值时,则需要将统计临时变量重置,且只需要从当前位置进行往后判断,因为当出现不连续的点时,前面连续部分的数肯定是最多的,因此不需要再进行遍历。③:当后面存在长度更长的原创 2020-09-07 17:26:43 · 1541 阅读 · 0 评论 -
C++:将两个递增链表合并为一个递减链表:
##问题分析:这个问题的解题思想在于应用头插法:①、新建一个空链表,用于存放合并后的结果②、依次比较两个链表中数据,较小的放入空链表中,然后指针进行移位再比较③、当比较完之后很可能会存在一个链表剩余部分为空,一个不为空的情况。④、对于这种情况,将剩余的数据头插入链表中即可。附上主体函数代码:void MergeList(LinkList &A , LinkList &B){ LNode *C = new LNode; // 建立一个新链表 C->next = N原创 2020-09-07 10:30:15 · 1547 阅读 · 0 评论 -
C++:数组中出现次数超过一半的数字
###题目:数组中有一个数字超过数组长度的一半,找出这个数。####分析:因为数组中需要查询的数字的次数超过一半,那么将数字分成两类。一、目标数字类 ; 二、非目标数字类 。因此可以在遍历数组时,将每个数字都设为目标数字类,如果下一个数字与他相同,那么就用临时变量+1,不同则-1. 当为0时,再设定下一个数字为目标数字类。其本质思想在于,目标数字类的次数>非目标数字类。因此用目标数字类 - 非目标数字类 肯定是大于0的。下面给出代码:#include <iostream>us原创 2020-09-06 17:27:02 · 1692 阅读 · 1 评论 -
【C++】C++连续子数组的最大和
C++连续子数组的最大和##问题分析见到这个问题的第一反应可能是暴力求解,依次遍历数组的子数组,但往往此方法的时间复杂度比较高,因此肯定不是最优解一、分析数组和规律随意给出一个数组:array【8】={1,-2,3,10,-4,7,2,-5};可以看到如果从头开始累加,那么到第二项时,子数组和就会编程负数,因此该和不可能成为可能解。因此可以得出一下结论和步骤:###①当遍历子数组时,对于小于等于0的部分可以直接抛弃; for(int i = 0 ; i< n ; i++) i原创 2020-09-06 15:44:46 · 819 阅读 · 0 评论