[解题报告]《算法零基础100讲》(第18讲) 线性枚举(二) - 统计法入门(2)

简介: [解题报告]《算法零基础100讲》(第18讲) 线性枚举(二) - 统计法入门

1991. 找到数组的中间位置、724. 寻找数组的中心下标


724. 寻找数组的中心下标

https://leetcode-cn.com/problems/find-pivot-index/


1991. 找到数组的中间位置

https://leetcode-cn.com/problems/find-the-middle-index-in-array/


主要思想


还记得我知识点说到的前缀和么,就是这道题。。按照说的来就好了。这两道题是一样的一起来吧。

int findMiddleIndex(int* nums, int numsSize){
    int total = 0, sum = 0;
    for(int i = 0; i < numsSize;i++)
        total += nums[i];            //全部和
    for(int i = 0; i < numsSize;sum += nums[i],i++)
        if(sum * 2 == total - nums[i]) return i;//满足条件返回
    return -1;
}


结果分析


image.png


可以了


26. 删除有序数组中的重复项


26. 删除有序数组中的重复项

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/


主要思想


统计重复元素,把非重复元素前移就好了。


int removeDuplicates(int* nums, int numsSize){
    int count = 0;
    for(int i = 1;i < numsSize; ++i){
        if(nums[i] == nums[i - count - 1]) //重复元素 统计
            count ++;
        else nums[i - count] = nums[i];     //非重复元素前移
    }
    return numsSize - count;            //返回值
}

结果分析


image.png


简洁,完美


1018. 可被 5 整除的二进制前缀


1018. 可被 5 整除的二进制前缀

https://leetcode-cn.com/problems/binary-prefix-divisible-by-5/


主要思想


这道题就是按照要求算就好了,但是要注意会超出范围,及时取余。


返回数组需要malloc,之前之一注意堆栈的我竟然忘了。。。


bool* prefixesDivBy5(int* nums, int numsSize, int* returnSize){
    bool * ans = malloc(sizeof(bool) * numsSize);//申请堆空间
    int temp;       //记录当前值
    *returnSize = numsSize;
    for(int i = 0; i < numsSize; i++){
        temp <<= 1;         //移位2进制
        temp += nums[i];    //将个位插入
        temp %= 5;
        if(temp % 5) ans[i] = false;
        else ans[i] = true;
    }
    return ans;
}

结果分析


image.png


凑合


1015. 可被 K 整除的最小整数


1015. 可被 K 整除的最小整数

https://leetcode-cn.com/problems/smallest-integer-divisible-by-k/


主要思想


这个要注意死循环,因为1111生成过程中为*10,所以必然不包含2和5的因子,所以要排除。


int smallestRepunitDivByK(int k){
    if(k % 2 == 0 || k % 5 == 0) return -1;//排除情况
    int temp = 0,i = 0;
    while(++i){
        temp *= 10;
        temp++;
        temp %= k;//及时取余计算防止溢出
        if(temp % k == 0) return i;
    }
    return 0;
}

结果分析


image.png


还行


1869. 哪种连续子字符串更长


1869. 哪种连续子字符串更长

https://leetcode-cn.com/problems/longer-contiguous-segments-of-ones-than-zeros/


主要思想


直接统计最大1和最小0的字串比较就好了


bool checkZeroOnes(char * s){
    int max1 = 0,max0 = 0;
    for(int i = 0;s[i] != 0;){    //内部有i++这里不能加i++ 否则结果不对
        int count0 = 0,count1 = 0;
        while(s[i] == '0'){//统计1的数字
            count0 ++;
            i++;
        }
        while(s[i] == '1'){//统计0的数字
            count1++;
            i++;
        }
        max1 = count1 > max1 ? count1 : max1;
        max0 = count0 > max0 ? count0 : max0;
    }
    return max1 > max0;
}


结果分析

image.png



还行


三、今日总结


今天的难度不高,就是题量大,写论文去咯-.-。。。。


相关文章
|
2月前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
116 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
42 0
|
2月前
|
算法 C# 索引
C#线性查找算法
C#线性查找算法!
|
3月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
3月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
3月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
3月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
133 0
|
3月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
3月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
3月前
|
人工智能 算法 BI
【算法】 线性DP(C/C++)
【算法】 线性DP(C/C++)

热门文章

最新文章

下一篇
开通oss服务