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

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

主要目录


零、写在前面


一、主要知识点


       1.十进制的数位数是否为偶数


       2.前缀和


二、课后习题


1295. 统计位数为偶数的数字


主要思想


结果分析


540. 有序数组中的单一元素


主要思想


结果分析


剑指 Offer 21. 调整数组顺序使奇数位于偶数前面


主要思想


结果分析


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


主要思想


结果分析


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


主要思想


结果分析


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


主要思想


结果分析


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


主要思想


结果分析


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


主要思想


结果分析


三、今日总结




零、写在前面


        这是打卡的第十八天,今天题目比较简单,就是题量巨大,补充一个知识点,主要知识点在


《算法零基础100讲》(第18讲) 线性枚举(二) - 统计法入门https://blog.csdn.net/WhereIsHeroFrom/article/details/120875708

https://blog.csdn.net/WhereIsHeroFrom/article/details/120875708


一、主要知识点


       1.十进制的数位数是否为偶数


       主要利用到的思想就是先确定位数,然后看是否为偶数。


bool weishu(int n){
    int count = 0;    //初始化个数
    while(n){
        count ++;
        n /= 10;        //数数
    }
    return !(count & 1);    //判断是否为偶数
}

       2.前缀和


       有个东西我们可以求一个数组的前缀和,很多题都需要用到。


int pivotIndex(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;    //sum统计前缀和进行判断
    return -1;
    }


二、课后习题


1295. 统计位数为偶数的数字


1295. 统计位数为偶数的数字

https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits/


主要思想


从前到后扫描,用变量计数,更新结果就好了。。看代码


bool weishu(int n){    //判断是否为偶数,看知识点
    int count = 0;
    while(n){
        count ++;
        n /= 10;
    }
    return !(count&1);
}
int findNumbers(int* nums, int numsSize){
    int count = 0;
    for(int i = 0;i < numsSize;i++)
        if(weishu(nums[i])) count++;//满足条件的计数
    return count;
}

结果分析

image.png



总觉得,力扣的4ms和0ms差距不大 233


540. 有序数组中的单一元素


540. 有序数组中的单一元素

https://leetcode-cn.com/problems/single-element-in-a-sorted-array/


主要思想


利用二分的思想,判断中间的值是否和后面的值相等。其中含有只有一个元素的串的长度一定为奇数。

int singleNonDuplicate(int* nums, int numsSize){
    int low = 0,high = numsSize - 1;//二分初始值
    while(low < high){            //二分跳出条件
        int mid = (low + high) /2;    //二分中间位置
        if(mid % 2 == 1) mid--;        //只判断偶数位
        if(nums[mid] == nums[mid + 1])  low = mid +2;//中间两个相同,所以直接返回高位
        else high = mid;            //无法判断中间位置,但是后面个数为偶数 所以返回前面
    }
    return nums[low];
}


结果分析


image.png


凑合,还行。


剑指 Offer 21. 调整数组顺序使奇数位于偶数前面


剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/


主要思想


两个指针,一个在前,一个在后,一共往后扫找偶数,一个往前扫找奇数,找到后交换就行了呗。


int* exchange(int* nums, int numsSize, int* returnSize){
    int i = 0 , j = numsSize - 1;
    *returnSize = numsSize;
    while(i < j){
        while((nums[i]&1)&&i < j)  //找到第一个偶数
            i++;
        while((!(nums[j]&1))&& i < j) //找到第一个奇数
            j--;
        if(i < j){
            nums[i] = nums[i] ^ nums[j];//交换i j对应元素
            nums[j] = nums[i] ^ nums[j];
            nums[i] = nums[i] ^ nums[j]; 
        }
        else break;      
    }
    return nums;
}


结果分析


image.png


还行吧。


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

热门文章

最新文章