原地算法求两数之和

news2024/9/25 11:16:41

      给定一个自增序列数组,总数组中找出两个元素等于目标值,并输出元素的下标。这个题右很多解法,通过hash可以将时间复杂度降到O(n),但是需要额外开辟空间,那么原地算法非常适合解决此题,及保障时间复杂度,亦可保障空间复杂度的最优。

1、算法思路

/**
 * 展示数组
*/
void   show_arr(uint32* head,int  len)
{
    if(head == NULL){
        perror("arr  is not  init");
        exit(0);
    }
    printf("----------------\n");
    int  i = 0;
    for(i;i<len;i++)
    {
        printf("%d\t",head[i]);
    }
     printf("\n");
}

/**
 * 求两数之和    递增数列
 * @param head  数组首地址
 * @param len   数字长度
 * @param sum   目标数
*/
void   two_sum(int* head,int  len,int sum)
{
  
  int  left = 0 , right = len -1 ;
  int  flag = 0;
  while (left < right)
  {
     /// 两数之和
     int  temp =  head[left]  + head[right];
     int  diff =  temp - sum;
     if(diff > 0)
     {
        /// 差值大于0,说明当前temp大于目标值,需要将右指针左移,减小temp,使得temp靠近目标值
        right --;
     }
      else  if(diff < 0 ) 
     {
        /// 差值小于0,说明当前temp小于于目标值,需要将左指针右移,增大temp,使得temp靠近目标值
        left ++;
     }
     else
     {
        flag = 1;
        /// temp命中目标值
       printf("left=%d,right=%d,temp=%d\n",left,right,temp);
       left ++;
       right --;
     }
  }

  if(flag ==0)
  {
     printf("%s\n"," The arr can not find two number that sum  equal target value  ");
  }

}

2、测试算法

    int  arr[] = { 8 , 12 , 15, 23 , 27 , 34 , 39 ,41 ,46, 55, 67, 76, 83 };
    int* head =  &arr[0];
    int len =  sizeof(arr)/sizeof(int);
  
    two_sum(head,len,70);

   下标2对应的是15,下标9对应的是55,两数之和正好是70.

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

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

相关文章

基于STM32的摇杆开关控制小恐龙游戏(附源码)

文章目录 一、 前言谷歌小恐龙 二、硬件三、软件3.1 摇杆开关3.2 OLED屏幕 四、展示五、总结 一、 前言 最近有看到别人在OLED屏幕上玩小恐龙&#xff0c;所幸查阅下资料&#xff0c;并下好源码。可惜他的源码的主控是STM32F103ZET6&#xff0c;用的是STM32CubeIDE&#xff0c…

C++的深拷贝和浅拷贝

浅拷贝是一种简单的拷贝方式&#xff0c;仅仅是复制对象的基本类型成员和指针成员的值&#xff0c;而不复制指针所指向的内存。这可能会导致两个对象共享相同的资源&#xff0c;从而引发潜在的问题&#xff0c;如内存泄漏、意外修改共享资源等。一般来说编译器默认帮我们实现的…

运行HGD数据集的 example.py 文件

使用HGD数据集时&#xff0c;需要从braindecode中调用相关的函数&#xff0c;但是在我的环境中运行时出现错误&#xff0c;现将解决过程记录&#xff0c;方便以后查阅。 运行HGD数据集的 example.py 文件 ModuleNotFoundError: No module named ‘braindecode.datautil.signalp…

PCL安装与配置(PCL1.8.1+MSVC2017)

上一篇安装PCL1.9.1,由于Generic Warning框一直弹出。 一、PCL1.8.1下载: 路径:PCL网址 所以我又安装了PCL1.8.1 MSVC2017 x64版本的。 二、安装 安装的步骤,和PCL安装与配置(PCL1.9.1+MSVC2017)这一篇一致。大家可以参考。 直接安装双击(PCL-1.8.1-AllInOne-msvc201…

【小趴菜前端实习日记1】

后台管理系统的模块化开发&#xff1a;vue2vueRouterElement-uiaxios 一、后台框架&#xff1a;element-ui <router-view>匹配路由二、封装侧边栏&#xff08;结合el-menu进行二次封装&#xff09;1.slideBar.vue:2.slideBarItem.vuevue中用template标签包裹循环渲染列表…

AI数字人直播平台+短视频合成平台软件系统 附带源代码包以及部署教程

AI数字人直播平台概述 AI数字人直播平台是一种基于人工智能技术的虚拟直播系统&#xff0c;它利用深度学习、自然语言处理、计算机视觉等技术&#xff0c;克隆出与真人相似的AI数字人&#xff0c;并在平台上进行直播。这些数字人不仅具有真人的外形、动作&#xff0c;而且镜头…

【vulhub靶场之thinkphp】——(5-rce)

第一步&#xff1a;打开靶场 输入开启命令 cd vulhub/thinkphp/5-rce docker-compose up -d docker-compose ps//查看开启的端口 第二步&#xff1a; 访问网址 第三步&#xff1a;漏洞利用 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&am…

Docker如何优雅删除镜像以及容器

一、先查看镜像和容器 docker images docker ps -a 二、停止正在运行的容器&#xff08;CONTAINER ID即容器ID&#xff0c;直接复制即可&#xff09; docker stop CONTAINER ID 三、删除容器 docker rm CONTAINER ID 四、删除镜像&#xff08;IMAGE ID即镜像ID&#xff0c;同理…

25考研计算机组成原理复习·3.3主存储器与CPU的连接·3.4外部存储器

目录 主存储器与CPU的连接 存储芯片的基本结构 位扩展/字扩展 位扩展 字扩展 字位同时扩展 外部存储器 磁盘存储器 磁盘原理 磁盘设备的组成 性能指标 磁盘阵列RAID 固态硬盘 组成 &#x1f469;‍&#x1f4bb; 读写性能特性 与机械硬盘相比的特点 &#x1f…

【Linux】权限(shell外壳、文件权限、管理权限)

目录 推荐文章一、shell 外壳1 文章详解&#xff1a;秒懂shell外壳程序3.shell 外壳是什么&#xff1f;4.shell 的执行 二、用户权限1.用户类型1.1.普通用户切换 rootsu 与 su - 的区别[Linux 中su 与su - 的区别](http://t.csdnimg.cn/IlIET)su - root &#xff08;完全切换了…

20240807提取飞凌OK3588-C的IMG固件中的时钟频率link_freq和pixel_clock

20240807提取飞凌OK3588-C的IMG固件中的时钟频率link_freq和pixel_clock 2024/8/6 16:32 缘起&#xff1a;调试代码的时候边调试变修改&#xff0c;在优化MIPI CSI时钟的时候&#xff0c;越改越差&#xff01;最后变成了负优化。 现在源代码/C文件找不到了&#xff0c;但是还有…

SQL注入实例(sqli-labs/less-19)

0、初始页面 1、确定闭合字符 注入点为referer&#xff0c;闭合字符为单引号 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标

笔面试编程题总结

8/6诺瓦星云 修改程序 void point(int *p){*p p[2];}; int main() {int c[] {1,2,3,4,5},*p c;point(p1);for(;p <c5;){printf("%d",*p);}return 0; }1、分隔字符串 strtok //c语言 #include <stdio.h> #include <string.h>// 函数声明 char* fin…

【合并 K 个升序链表】python刷题记录

R4-分治篇 目录 最小堆方法 分治法 ps: 如果只是数组就很好处理了 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeKLists(self, lists…

C++ GDl+ 多张图片合并生成GIF动画格式图片

使用ImageMagick多张图合成GIF。 1、工具下载安装 下载地址&#xff1a;ImageMagick – Download&#xff0c;windows下载版本如下&#xff1a; 下载后&#xff0c;安装&#xff0c;安装时选择为C/C安装动态库和头文件。 2、代码实现 附加包含目录&#xff1a;ImageMagick-7.…

Is exchanging integral and sum this way allowed?

See https://math.stackexchange.com/questions/3878856/is-exchanging-integral-and-sum-this-way-allowed#:~:textYes%2C%20and%20the%20reason%20is%20simple%20-%20the,just%20a%20whole%20lot%20of%20these%20squeezed%20together.

涉密U盘管理:公司禁用个人U盘的两种常规设置方法

古语云&#xff1a;“事以密成&#xff0c;语以泄败。”此言道出了保密工作对于事业成功的重要性。 在当今这个信息爆炸的时代&#xff0c;数据的安全与保密已成为企业生存与发展的基石。尤其是在处理涉密信息时&#xff0c;任何微小的疏忽都可能引发严重的后果。 因此&#x…

zabbix7.0TLS-04-快速入门-监控项

文章目录 1 概述2 查看一个主机的所有监控项3 添加新的监控项3.1 监控项 各个配置项详解3.2 测试配置项3.3 添加成功 1 概述 一个监控项对应了一个键和值。监控项是监控数据的来源&#xff0c;没有监控项也就没有监控数据。 监控项必须添加到某一个主机中&#xff0c;一个主机…

学习日志8.8--防火墙状态检测

在之前的拓扑实验中手动配置了安全策略&#xff0c;允许trust到untrust之间进行通信&#xff0c;也允许untrust到trust之间进行通信。意味着&#xff0c;防火墙是支持单方向管控的&#xff0c;意思是inbound和outbound方向的流量管控需要分别配置。 当在配置trust到untrust的安…

【人工智能】【机器学习】-好书推荐之《Python神经网络编程》

目录 内容概览 编程环境 面向对象 学习目标 如果你是想要自学机器学习相关知识的读者&#xff0c;我相信看完这篇文章的介绍后&#xff0c;你会对机器学习有更清晰的认识。帮助你走进机器学习的殿堂。 《Python神经网络编程》&#xff08;原书名&#xff1a;Make Your Own …