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

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



🕵️‍♀️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;
    }
};

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


目录
相关文章
|
8月前
|
设计模式
编程范式之争:面向对象编程与函数式编程的对决
在软件开发领域,面向对象编程(OOP)和函数式编程(FP)一直是两种主要的编程范式。本文将探讨这两种编程风格的优缺点,比较它们在不同场景下的适用性,并提供选择合适编程范式的指导原则。
73 0
|
5月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
87 1
|
1月前
|
算法
编程之旅:从代码到哲学
在这篇文章中,我们将踏上一段独特的旅程,探索编程不仅仅是一门技术,更是一种思考世界的方式。通过个人的技术感悟和代码示例,我们将一同发现如何将编程的原则应用于日常生活,以及这些原则如何帮助我们更好地理解周围的世界。这不仅是一个关于代码的学习过程,更是一次心灵的成长之旅。
|
2月前
|
设计模式 算法 搜索推荐
探索编程之美:从代码到哲学的启示
在数字世界的深处,编程不仅仅是一系列指令的排列组合。它是思考的艺术,是解决问题的舞蹈,更是人类智慧与创造力的体现。本文将通过浅显易懂的语言,带你领略编程的魅力所在,并结合个人技术感悟,探讨编程如何影响我们的思维方式和世界观。让我们一起跟随代码的脚步,发现那些隐藏在逻辑背后的哲理与美。
|
2月前
|
开发者
从代码到哲学:我的编程之旅
在这段旅程中,我从一个对代码一无所知的新手成长为一个能够用代码解决问题的开发者。这不仅仅是技术的成长,更是我对生活、对世界理解的深化。编程,对我来说,已经超越了技术层面,成为了一种思考问题、解决问题的方法,甚至是一种生活方式。
|
2月前
|
算法 搜索推荐
探索编程之旅:从代码到哲学的思考
【10月更文挑战第38天】在数字世界的编织中,代码是构成万物的基石。本文将带领读者穿梭于编程实践与人生哲学之间,探讨如何通过技术实现自我提升,并反思在技术追求中我们究竟寻求的是什么。从一个简单的代码示例出发,我们将逐步展开对编程艺术、生活选择和宇宙意义的思考,最终回到甘地的名言,“你必须成为你希望在世界上看到的改变”,以此来启发读者找到自己技术之路上的初心与方向。
42 3
|
2月前
|
算法 JavaScript 前端开发
编程之旅:从代码到哲学的探索
【10月更文挑战第31天】在数字世界的编织中,每一行代码都是我们与机器对话的语言。本文将带领读者踏上一段从编写第一行代码到深入理解编程哲学的旅程。我们将探索编程如何不仅仅是技术的实践,更是对问题解决、逻辑思维乃至生活哲学的一种体现。通过深入浅出的例子和反思,本文旨在启发读者思考编程背后的更深层次意义,以及它如何塑造我们对世界的认识。
|
4月前
|
机器学习/深度学习 人工智能 算法
编程之旅:从代码到哲学的启示
【9月更文挑战第20天】在编程的世界里,每一行代码都是思考的足迹,每一个算法都蕴含着解决问题的智慧。正如甘地所言,“你必须成为你希望在世界上看到的改变。” 本文将带你走进编程的内在世界,探索如何通过技术提升自我,实现个人成长和变革。
|
7月前
|
存储 人工智能 算法
计算机编程:从基础到实践,探索编程的奥秘
计算机编程:从基础到实践,探索编程的奥秘
81 1
|
8月前
|
Java Unix 编译器
C语言:编程世界的基石与魅力之源
C语言是编程的基础,由丹尼斯·里奇在70年代创造,主要用于系统编程和嵌入式系统开发,以其简洁语法、高效执行和硬件访问能力著称。它影响了众多现代编程语言,并在游戏开发等领域有重要应用。通过实例展示了C语言计算两个整数和的功能,强调其在编程教育和计算机科学中的持续价值。