【C语言】数据结构基础(每日小细节025),有三数之和哦

news2024/11/26 16:47:57

算法好题初阶(一共14回已经更新完毕),从今天开始就是基础的数据结构题目 

1.只出现一次的数字 

 

如果不额外开辟任何空间的话一定要想到位运算符

异或^ :两个整数异或,遵循相同为0,相异为1的二进制位运算规则

(1)任何两个相同的数字异或之后都是0

(2)任何数字和0异或之后都是本身

(3)异或遵循结合律和交换律

知道这些之后这个题就变得尤为简单,因为根据(1)所有数字里面成对出现的异或之后都是0,0和单身狗异或之后还是单身狗,并且因为(3)所以我们上面分析的过程是正确的,即使成对出现的数字不挨着,交换之后还是对的

int singleNumber(int* nums, int numsSize){
int ans=0;
for(int i=0;i<numsSize;i++)
{
    ans^=nums[i];
}
return ans;
}

 


2.多数元素

 看到一个很有意思的解法, 每个数字都代表了一个门派,开始打擂台,假设每个角色的攻击力一样,那么1v1就是两个人都死,擂台上无人(count==0)时,那么直接站上去(ans=nums【i】),如果上来一个同门派(nums【i】==ans)那么人数++(count++),如果上来别的门派直接各死一个(count--)

int majorityElement(int* nums, int numsSize){
int ans=-1,count=0;
for(int i=0;i<numsSize;i++)
{
    if(count==0)
    {
        ans=nums[i];
        count+=1;
    }
    else if(nums[i]==ans)
    {
          count+=1;
    }
    else
    {
        count-=1;
    }
}
return ans;
}

3..三数之和

 三数之和是两数之和的进阶版

两数之和

两数之和是很简单的,甚至暴力遍历也可以

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
*returnSize=2;
int* tmp=(int*)malloc(sizeof(int)*2);
for(int i=0;i<numsSize;i++)
{
    for(int j=i+1;j<numsSize;j++)
    {
        if(nums[i]+nums[j]==target)
        {
            tmp[0]=i;
            tmp[1]=j;
            return tmp;
        }
    }
}
return NULL;
}

 三数之和就是一个进阶版,首先暴力不能解决问题,太显然了,时间肯定超

那么还记得昨天更新的最后一天二叉搜索树里面的找两个节点的最近共同祖先,其实一个思路,昨天的思路不重复了,今天的是首先把数组排序,然后规定三个下标变量,left,right,mid,顾名思义,left从0开始,right从最后一个下标开始,mid就是left的下一个,然后开始计算三个数字的和,如果sum<0,那么说明mid的值应该更大一点,因为在我们的方法里left是最外层的循环,right除了nums[right]==nums[--right]还有sum>0,否则也是不会变的,所以只能mid向后走,因为已经有序所以向后就是增大sum

同理,如果sum>0,就应该让right--,平衡sum

最后如果有和nums[left]重复的元素,直接不遍历,left返回for循环就可以

如果有和nums[mid]相同的元素,mid++

如果有和nums[right]相等的元素,right--

 int cmp(const void* a1,const void*b1)
 {
     return *(int*)a1-*(int*)b1;
 }
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
*returnSize=0;
if(numsSize<3) return NULL;
qsort(nums,numsSize,sizeof(int),cmp); //排序
int** ans=(int**)malloc(sizeof(int*)*numsSize*numsSize);
*returnColumnSizes=(int*)malloc(sizeof(int)*numsSize*numsSize);
int i,j,k,sum,left,right=0,mid=0;
for(left=0;left<numsSize-2;left++)
{
    if(nums[left]>0) return ans;
    if(left>0 && nums[left-1]==nums[left]) continue;
    mid=left+1;right=numsSize-1;
    while(mid<right)
    {
        sum=nums[left]+nums[right]+nums[mid];
        if(sum==0)
        {
            ans[*returnSize]=(int*)malloc(sizeof(int)*3);
            (*returnColumnSizes)[*returnSize]=3;
            ans[*returnSize][0]=nums[left];
            ans[*returnSize][1]=nums[mid];
            ans[*returnSize][2]=nums[right];
            *returnSize+=1;
            while(mid<right && nums[mid]==nums[++mid]);
            while(mid<right && nums[right]==nums[--right]);
        }
        else if(sum<0)
        {
            mid++;
        }
        else{
            right--;
        }
    }

}
return ans;
}

一定要注意二维数组的初始化,一定是数组大小的平方!!!否则会栈溢出,或者写一个可以扩容的也行,但是这个题目的难点显然就不在这里,所以比数组长度平方还大肯定没问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Nginx 基础】

Nginx 的安装 Nginx 的静态网站部署 理解 Nginx 的反向代理与负载均衡&#xff0c;能够配置反向代理与负载均衡 一、 Nginx 概述 Nginx 是一款高性能的 HTTP 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;由俄罗斯的程序工程师伊戈…

spring学习系列

Spring_三种方式的依赖注入1.第一种&#xff0c;set方式&#xff0c;property2.构造器注入&#xff08;构造方法&#xff09;3.p命名空间注入4、注入各种数据类型//老师类 public class Teacher {private String name;private int age; }//课程类 public class Course {private…

云原生技术学习笔记(基础版)

一、容器基本概念容器运行时&#xff0c;多种虚拟化技术&#xff0c;runC、kata、gVisor等。containerd -shim不是个lib&#xff0c;是个守护进程&#xff0c;管理容器生命周期,可被containerd动态接管。&#xff08;可以从containerd中脱离出来&#xff0c;插件化管理&#xf…

jvm系列(1)--JVM和Java体系架构

目录Java-跨平台的语言JVM-跨语言的平台多语言混合编程虚拟机虚拟机概念Java虚拟机JVM的位置JVM的整体结构Java代码执行流程JVM的架构模型基于栈的指令集架构基于寄存器的指令级架构两种架构的举例JVM架构总结JVM的生命周期虚拟机的启动虚拟机的执行虚拟机的退出Java-跨平台的语…

VTK-vtkSelectPolyDataFilter

前言&#xff1a;本博文主要记录vtkSelectPolyDataFilter接口的应用&#xff0c;实现原理&#xff0c;以及与其近似的vtkClipPolyData&vtkImplicitSelectionLoop的应用相比较&#xff0c;帮助小伙伴理解vtkSelectPolyDataFilter接口的实现原理&#xff0c;并且与其它接口进…

2023新生个人训练赛第08场解题报告

问题 A: Candies 题目描述 We have a 2N grid. We will denote the square at the i-th row and j-th column (1≤i≤2, 1≤j≤N) as (i,j). You are initially in the top-left square, (1,1). You will travel to the bottom-right square, (2,N), by repeatedly moving ri…

鉴源论坛 · 观通丨轨交系统安全性设计

作者 | 刘艳青 上海控安安全测评中心安全测评部测试经理 版块 | 鉴源论坛 观通 引语&#xff1a;第一篇对轨交信号系统从铁路系统分类和组成、城市轨交系统分类和组成、城市轨交系统功能、城市轨交系统发展方面做了介绍&#xff0c;第二篇从信号基础出发&#xff0c;讲述了信…

【蓝桥杯算法 1】AcWing166.飞行员兄弟

本文已收录专栏 &#x1f332;《蓝桥杯周训练》&#x1f332; “飞行员兄弟”这个游戏&#xff0c;需要玩家顺利的打开一个拥有 16 个把手的冰箱。 已知每个把手可以处于以下两种状态之一&#xff1a;打开或关闭。 只有当所有把手都打开时&#xff0c;冰箱才会打开。 把手可…

支持数位板的远程软件,实现远程使用 Wacom 数位板

现在数位板越来越流行了&#xff0c;影视、动漫、游戏、设计等行业经常需要用到。Wacom 是数位板领域的全球领导者&#xff0c;其设备为创意人员带来了真正的纸感绘图体验。 数位板用户需要远程办公的时候&#xff0c;经常会遇到两个问题&#xff1a;远程软件不支持数位板、远…

(考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例

文章目录一&#xff1a;计算机网络结构分层的必要性&#xff08;1&#xff09;分层思想&#xff08;2&#xff09;计算机网络分层思想①&#xff1a;如何让两台计算机通过网线传输数据②&#xff1a;如何让分组在单个网络内传输③&#xff1a;如何让分组在网络间传输④&#xf…

SpringBoot项目练习

项目名称&#xff1a;旅游网站后台管理一&#xff1a;项目简介旅游网站后台管理,包括如下用户&#xff1a;旅游线路&#xff1a;线路图片&#xff1a;线路分类&#xff1a;旅行社&#xff1a;后台技术&#xff1a;springboot、mybatis、mybatis plus前台&#xff1a;bootstrap、…

测试开发 | 专项测试技术初识Hook

本文节选自霍格沃兹测试学院内部教材Hook 技术需要预先分析目标应用的源代码和逻辑&#xff0c;根据目标测试场景设置目标、逻辑和数据&#xff0c;然后运行时动态的对目标函数参数值、逻辑或者返回值做修改&#xff0c;达到修改现有函数逻辑、实现目标测试场景的目的。Hook的价…

JavaWeb基础(一) Mybatis使用详解

JavaWeb基础——Mybatis 1&#xff0c;配置文件实现CRUD 如上图所示产品原型&#xff0c;里面包含了品牌数据的 查询 、按条件查询、添加、删除、批量删除、修改 等功能&#xff0c;而这些功能其实就是对数据库表中的数据进行CRUD操作。接下来我们就使用Mybatis完成品牌数据的…

3-2存储系统-主存与CPU的连接外部存储器

文章目录一.主存与CPU的连接&#xff08;一&#xff09;连接原理&#xff08;二&#xff09;主存容量的扩展1.位扩展法2.字扩展法3.字位同时扩展法&#xff08;三&#xff09;存储芯片的地址分配和片选1.线选法2.译码片选法二.外部存储器&#xff08;一&#xff09;磁盘储存器1…

JVM-三色标记

一、什么叫三色标记三色也叫三色抽象&#xff0c;它是所有mutator和collector都必须遵守的定律。它把对象标记为三种颜色&#xff1a;白色&#xff1a;对象还未被垃圾收集器访问&#xff0c;在回收的开始阶段所有的对象均为白色&#xff08;当然了这只是指概念上的&#xff0c;…

PaddleNLP开源UTC通用文本分类技术,斩获ZeroCLUE、FewCLUE双榜第一

飞桨PaddlePaddle 2023-01-12 20:02 发表于湖北 针对产业级分类场景中任务多样、数据稀缺、标签迁移难度大等挑战&#xff0c;百度提出了一个大一统的通用文本分类技术UTC&#xff08;Universal Text Classfication&#xff09;。 UTC在ZeroCLUE和FewCLUE两个榜单上均位居榜首…

css加载会造成阻塞吗?

目录 A.设置网络加载速度 B.css加载会阻塞DOM树的解析渲染吗&#xff1f; 1.css会阻塞DOM树解析&#xff1f; 2.css加载会阻塞DOM树渲染&#xff1f; 3.个人对这种机制的评价 3.css加载会阻塞js运行吗&#xff1f; 4.结论 可以使用以下几种方法解决CSS加载速度的问题: …

曲线曲率介绍和python求法

目录曲率1.1 弧长参数 s参考资料曲率 比如我们想知道曲线 AB\boldsymbol{AB}AB 上任一点处的弯曲程度怎么办呢&#xff1f;这时就需要一个十分重要的概念——曲率。 维基百科&#xff1a; 在数学中&#xff0c;曲率&#xff08;curvature&#xff09;是描述几何体弯曲程度的量…

Octave安装与使用

1. 介绍 Octave是一种编程语言&#xff0c;旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件&#xff0c;早期版本为命令行交互方式&#xff0c;4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近&#xff0c;可以很容易的将matlab程序…

机器学习/人工智能 实验二:图像特征自动学习方法实践与分析

写在前面 参考的是https://zh.d2l.ai/index.html 一、实验目的与要求 (1)利用基于深度学习的特征自动学习方法完成图像特征提取的实验方案的设计。 (2)编程并利用相关软件完成实验测试&#xff0c;得到实验结果。 (3)通过对实验数据的分析、整理&#xff0c;得出实验结论&am…