【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!

简介: 【编程技巧】精通编程的秘密武器:高效编程技巧揭秘!



🕵️‍♀️1. 摩尔投票算法:求解多数元素

🔍1.1 问题描述:多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素【多数元素是指在数组中出现次数 大于一半及以上的元素】

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:
输入:nums = [3,2,3]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2

代码模板:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
    }
};

🔍1.2 摩尔投票算法

摩尔投票算法是一种用于寻找数组中出现次数超过一半的主要元素的高效算法。该算法的核心思想是通过不同元素之间的相互抵消来找到可能的主要元素。

时间复杂度为 O(n),空间复杂度为 O(1)。

摩尔投票算法的详细步骤:

  1. 初始化候选元素和计数器: 选择数组的第一个元素作为候选元素,初始计数器为1。
  2. 遍历数组:从数组的第二个元素开始遍历,对于每个元素执行以下操作:
  • 如果当前元素与候选元素相同,将计数器加1。
  • 如果当前元素与候选元素不同,将计数器减1。
  • 如果计数器减到0,说明之前的候选元素的出现次数与当前元素的出现次数相抵消,因此选择当前元素作为新的候选元素,并将计数器重新设为1。

摩尔投票算法的关键在于,由于主要元素的出现次数超过一半【前提条件】,其余元素的出现次数总是无法抵消主要元素的出现次数,因此最终剩下的候选元素即为主要元素。

🎉解决代码
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int num=nums[0],count=0;
        for(int i=0;i<nums.size();i++){
            if(i==0 ||num==nums[i]){
                count++;
            }
            else{
                if(count==0){
                    num=nums[i];
                    count=1;
                }
                else count--;
            }
        }
        return num;
    }
};

参考视频:【摩尔投票法】


目录
相关文章
|
1月前
|
算法 数据安全/隐私保护 C++
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计(一)
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计
36 0
|
1月前
|
SQL 算法 测试技术
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计(二)
【软件设计师备考 专题 】程序设计的核心:结构化程序设计与面向对象程序设计
44 0
|
1天前
|
Java C++ Python
编程的奇妙世界:膛目结舌的代码技巧探秘
编程的奇妙世界:膛目结舌的代码技巧探秘
|
2天前
|
存储 设计模式 人工智能
程序设计:原理、实践与魅力
程序设计:原理、实践与魅力
8 0
|
4天前
|
算法 程序员 测试技术
探索代码之美:我的编程哲学
【4月更文挑战第23天】 在数字化的浪潮中,编程已成为一种艺术形式。本文将分享作者在编程实践中形成的技术感悟和哲学思考。从代码的简洁性到系统的可维护性,从快速迭代到持续学习,作者将阐述如何在追求技术卓越的同时保持对生活的热爱和好奇心。这不仅是一篇关于编程技能提升的指南,更是一次关于如何以程序员身份在快速变化的技术世界中寻找定位的思考之旅。
|
4天前
|
算法 程序员
代码之禅:从技术细节到哲学思考
【4月更文挑战第23天】在编程的世界里,每一行代码都是对技术深度的一次探索,每一段程序都是逻辑严密性的一种体现。本文通过作者的个人技术感悟,探讨了编程不仅仅是一种职业技能,更是一种思考世界的方式。从最初的技术困惑到深层的哲学思考,文章试图揭示编程背后的思维模式和生活哲学,展现一个程序员从技术实践者到思想者的蜕变过程。
|
1月前
|
敏捷开发 算法 测试技术
C/C++ 编程大师的秘籍:轻松掌握高质量代码之道
C/C++ 编程大师的秘籍:轻松掌握高质量代码之道
95 0
|
1月前
|
算法 程序员 开发工具
代码之禅:高效编程的艺术与实践
【2月更文挑战第22天】 在数字时代的浪潮中,编程已不仅仅是一种技术活,它更是一场思维的舞蹈,一种解决问题的艺术。本文将深入探讨如何通过持续学习、精通算法与数据结构、编写可读性强和模块化良好的代码,以及利用版本控制工具来提升编程效率和质量。我们将一起揭开那些隐藏在键盘敲击背后的智慧,探索那些能够使程序员如同艺术家一般在代码世界中自由创作的技巧和方法。
|
3月前
|
算法 程序员 C语言
【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?
【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?
33 0
|
10月前
|
算法
谈一谈|编程中的数学思维
谈一谈|编程中的数学思维
105 0