iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++LeetCode数据结构基础详解
  • 678
分享到

C++LeetCode数据结构基础详解

2024-04-02 19:04:59 678人浏览 八月长安
摘要

目录一、只出现一次的数字二、多数元素三、三数之和总结一、只出现一次的数字 遍历一遍数组利用异或的特性来实现(相同为0,相异为1 ) 例如[4,1,2,1,2] 4和1异或为5 5和

一、只出现一次的数字

遍历一遍数组利用异或的特性来实现(相同为0,相异为1 )

例如[4,1,2,1,2] 4和1异或为5 5和2异或为7 7和1异或为6 6和2异或为4 这样就能找出唯一的数字了


public int singleNumber(int[] nums) {
        int res=0;
        for(int i=0;i<nums.length;i++){
           res=res^nums[i];
        }
        return res;
    }

二、多数元素

这题可以利用排序就返回中间位置元素,就是数量超过一半的数字,但是时间复杂度为O(nlogn),

利用摩尔投票法,实现遍历一遍数组就能找到多数元素,

具体实现:定义两个变量计数位和标记位,将计数位初始化为1 ,将标记位为数组第一个元素 如图[2,2,1,1,1,2,2]

在这里插入图片描述


public int majorityElement(int[] nums) {
    //摩尔投票法  也叫同归于尽法 
    int count=1;
    int res=nums[0];
    for(int i=1;i<nums.length;i++){
        if(res==nums[i]){
            count++;
        }else{
            count--;
            if(count==0){
                res=nums[i];
                count=1;
            }
        }
    }
    return res;
 }

三、三数之和

三数之和有点类似与两数之和,但是难度确增加了不少

思路是先对数组进行排序,之后定义双指针**,左指针为i+1,右指针为最后一个数组元素,进行求和找和第一个数字相等的数**

在这里插入图片描述


public List<List<Integer>> threeSum(int[] nums) {
        //排序加双指针
        Arrays.sort(nums);
        List <List<Integer>>  list=new ArrayList<>();
        if(nums==null||nums.length<3){
            return list;
        }
        for(int i=0;i<nums.length-2;i++){
            if(nums[i]>0){
                break;
            }
            if(i>0&&nums[i]==nums[i-1]){//去掉重复元素
                continue;
            }
            int left=i+1; int right=nums.length-1;
            while(left<right){
                int temp=-nums[i];
                if(nums[left]+nums[right]==temp){
                    list.add(new ArrayList<>(Arrays.asList(nums[i], nums[left], nums[right])));
                    left++;
                    right--;
                    while(left<right&&nums[left]==nums[left-1]) left++;
                    while(left<right&&nums[right]==nums[right+1]) right--;
                }else if(nums[left]+nums[right]>temp){
                    right--;
                }else{
                    left++;
                }
            }
        }
        return list;
     }

注意:

1 .给数组排序之后判断元素是否大于0,大于直接返回,后面元素一定大于0

2. 去掉重复的元素,如果值相同继续指针移动

3. Arrays.asList() 是将数组转换成List集合的方法

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++LeetCode数据结构基础详解

本文链接: https://www.lsjlt.com/news/132674.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++LeetCode数据结构基础详解
    目录一、只出现一次的数字二、多数元素三、三数之和总结一、只出现一次的数字 遍历一遍数组利用异或的特性来实现(相同为0,相异为1 ) 例如[4,1,2,1,2] 4和1异或为5 5和...
    99+
    2022-11-12
  • Python基础之数据结构详解
    目录一、列表1.1 列表更新元素1.2 列表增加元素1.3 列表删除元素1.4 列表的其他操作二、元组2.1 删除元组2.2 元组的其他操作三、字典3.1 字典删除元素3.2 字典的...
    99+
    2022-11-12
  • C语言编程数据结构基础详解小白篇
    目录数据结构的基本信息数据结构逻辑结构1,集合结构2,线性结构3,树结构4,图结构或网结构存储结构顺序储存结构链式储存结构抽象数据类型介绍 数据结构的基本信息 数据:是客观事物的符...
    99+
    2022-11-12
  • Redis基础数据结构
    Redis数据结构:String、Hash、List、Set、ZSet(每种数据结构均包含两种以上的内部编码) Redis单线程架构: 1. 纯内存访问 2. 非阻塞I/O (采用多路复用技术epoll) 3. 减少了线程切换和竞态产生的消...
    99+
    2016-07-28
    Redis基础数据结构
  • 基于C++详解数据结构(附带例题)
    目录前言数据结构线性表顺序存储链式小结栈和队列栈后缀表达式队列串串的基本用法ASCII码串的基本实现KMP模式算法匹配树树的基本操作双亲表示法孩子表示法孩子兄弟表示法二叉树顺序存储链...
    99+
    2022-11-13
  • java数据结构基础:栈
    目录准备工作编码环节push方法pop方法empty方法全部代码总结准备工作 工具:idea+jdk8 技术要求:java基础语法 编码环节 首先,我们得先确定下来,用什么数据来模拟...
    99+
    2022-11-12
  • C++数据结构之list详解
    目录前言一、list的节点二、list的迭代器2.1 const 迭代器2.2 修改方法二、美中不足三、迭代器的分类3.x std::find的一个报错总结前言 list相较于vec...
    99+
    2022-11-12
  • C++数据结构之堆详解
    目录堆的概念提示:完全二叉树堆的性质最大堆最小堆代码定义有限数组形式动态数组形式操作向下调整结点建立堆初始化打印堆测试main函数结果完整代码堆的概念 堆(heap)是计算机科学中一...
    99+
    2022-11-13
  • Java数据结构之图的基础概念和数据模型详解
    目录图的实际应用图的定义及分类图的相关术语图的存储结构邻接矩阵邻接表图的实现图的API设计代码实现图的实际应用 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用...
    99+
    2022-11-13
    Java数据结构 图 Java 图
  • java数据结构基础:绪论
    目录基本概念和术语数据数据元素数据项数据对象结构数据结构逻辑结构与物理结构逻辑结构物理结构抽象数据类型总结基本概念和术语 要想知道数据结构是什么,我们首先得去知道,数据和结构是什么;...
    99+
    2022-11-12
  • java数据结构基础:算法
    目录数据结构和算法关系高斯求和算法定义算法的特性算法设计的要求算法效率的度量方法函数的渐进增长总结数据结构和算法关系 虽然这个标题起的叫数据结构,但是我却总结算法。。。我不是没事找抽...
    99+
    2022-11-12
  • Java常见基础数据结构
    目录栈:队列:数组:链表:红黑树:总结栈: stack,又称堆栈,他是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 ...
    99+
    2022-11-12
  • Java基础之switch分支结构详解
    目录一、基本语法二、流程图三、快速入门四、switch 注意事项和细节讨论五、switch 课堂练习六、switch 和 if 的比较一、基本语法 二、流程图 1.画出 swtic...
    99+
    2022-11-12
  • C++数据结构之链表详解
    目录前言一、删除链表中给定值为key的节点二、反转链表三、返回链表的中间节点四、删除链表的倒数第K个节点五、分割链表六、合并两个有序链表七、删除有序链表中重复节点八、环形链表九、相交...
    99+
    2022-11-12
  • C++数据结构哈希表详解
    目录实现散列函数开散列方法闭散列方法(开地址方法)删除*实现 哈希表,即散列表,可以快速地存储和查询记录。理想哈希表的存储和查询时间都是 O(1)。 本《资料》中哈希表分以下几部分:...
    99+
    2022-11-13
  • C++数据结构的队列详解
    目录前言1.队列的概念及结构2.队列的实现2.1queue.h2.2queue.c2.3test.c总结前言 hello,大家好,这期文章我们来分享数据结构关于队列的知识。希望对大家...
    99+
    2022-11-12
  • java数据结构基础:线性表
    目录前言需求分析编码add方法getIndex方法pop方法insert方法getAll全部代码总结前言 其实线性表在生活中和栈的结构差不多。昨天总结了一篇单链表,也是线性表的一种。...
    99+
    2022-11-12
  • java数据结构基础:稀疏数组
    目录稀疏数组:实现思路:举例:二维数组转稀疏数组实现思路:稀疏数组恢复二维数组实现思路:代码实现:输出结果:总结稀疏数组: 当一个二维数组中大部份的值为0,或者为同一值的时候,可以用...
    99+
    2022-11-12
  • Jedis零基础入门及操作Redis中的数据结构详解
    目录Jedis简介及其入门Jedis简介Jedis的操作入门Jedis操作Redis中的数据结构字符串类型 string哈希类型 map列表类型 list集合类型 set有序集合类型...
    99+
    2022-11-13
  • Python基础必备之语法结构详解
    目录Python 语句续行隐式续行的方式显式续行的方式每行多语句注释空白字符空格作为缩进Python 语句 语句是 Python 解释器解析和处理的基本指令单元。通常解释器按顺序一个...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作