[解题报告]《算法零基础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



还行


三、今日总结


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


相关文章
|
12天前
|
存储 算法
算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
给定一个正整数数组和目标值target,找出总和大于等于target的最短连续子数组长度。利用滑动窗口(双指针)优化,维护窗口内元素和,通过单调性避免重复枚举,时间复杂度O(n)。当窗口和满足条件时收缩左边界,更新最小长度,最终返回结果。
|
25天前
|
存储 算法
算法入门:专题一:双指针(有效三角形的个数)
给定一个数组,找出能组成三角形的三元组个数。利用“两边之和大于第三边”的性质,先排序,再用双指针优化。固定最大边,左右指针从区间两端向内移动,若两短边之和大于最长边,则中间所有组合均有效,时间复杂度由暴力的O(n³)降至O(n²)。
|
24天前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
2月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
118 2
|
3月前
|
传感器 算法 Python
【电机矢量控制算法】基于线性死区补偿的永磁同步电机矢量控制算法仿真
【电机矢量控制算法】基于线性死区补偿的永磁同步电机矢量控制算法仿真
|
3月前
|
机器学习/深度学习 人工智能 算法
【多智能体编队】基于自适应控制算法非线性输入的多智能体系统编队控制研究(Matlab代码复现)
【多智能体编队】基于自适应控制算法非线性输入的多智能体系统编队控制研究(Matlab代码复现)
|
3月前
|
机器学习/深度学习 算法 数据格式
MARS算法理论和Python代码实现:用分段回归解决非线性时间序列预测问题
本文将深入探讨MARS算法的核心原理,并详细阐述其在时间序列预测任务中的应用策略与技术实现。
204 0
|
4月前
|
机器学习/深度学习 数据采集 算法
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
71 0
|
8月前
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
182 3
|
8月前
|
机器学习/深度学习 算法 机器人
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
529 2

热门文章

最新文章

下一篇
开通oss服务