热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有关数组题

2.1.6LongestConsecutiveSequence描述Givenanunsortedarrayofintegers,findthelengthofthelongestc

2.1.6 Longest Consecutive Sequence
描述
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1,2, 3, 4]. Return its length: 4.
Your algorithm should run in O(n) complexity.

function f9($arr)
{if(false&#61;&#61;&#61;is_array($arr)) return false;if(($n&#61;count($arr))<&#61;1) return $n;$hs&#61;array_flip($arr);//将数组的key与value翻转$maxlog&#61;0;foreach($hs as $key&#61;>$value){$nkey&#61;$key&#43;1;$longe&#61;1;while(array_key_exists($nkey,$hs)){//判断数组中是否存在key&#xff0c;bool$longe&#43;&#43;;$nkey&#43;&#43;;}$nkey&#61;$key-1;while(array_key_exists($nkey,$hs)){$longe&#43;&#43;;$nkey--;}if($maxlog<$longe) $maxlon&#61;$longe;}return $maxlon;
}
利用php自带的函数array_search 不用上面那么麻烦
function f9($arr)
{if(false&#61;&#61;&#61;is_array($arr)) return false;if(($n&#61;count($arr))<&#61;1) return $n;$maxlog&#61;0;foreach($arr as $key&#61;>$value){$lvalue&#61;$value&#43;1;$longe&#61;1;while(false!&#61;&#61;array_search($lvalue,$arr)){$longe&#43;&#43;;$lvalue&#43;&#43;;}$lvalue&#61;$value-1;while(false!&#61;&#61;array_search($lvalue,$arr)){$longe&#43;&#43;;$lvalue--;}if($maxlog<$longe) $maxlon&#61;$longe;}return $maxlon;
}
c&#43;&#43;中可以使用vector<> find函数

2.1.10 Remove Element
描述
Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn’t maer what you leave beyond the new length.

//时间复杂度&#xff1a;o(n)使用php自带的函数 array array_keys($arr,$value)找到数组中值为$value对应的键值&#xff0c;存在多个返回数组&#xff0c;不存在则true
function removeV($arr,$value)
{if(false&#61;&#61;&#61;is_array($arr)) return false;$brr&#61;array_keys($arr,$value);if(false&#61;&#61;&#61;$brr) return count($arr); foreach($brr as $key&#61;>$val){unset($arr[$val]);}return count($arr);
}
//时间复杂度&#xff1a;o(n),
function removeV($arr,$value)
{if(false&#61;&#61;&#61;is_array($arr)) return false;$n&#61;count($arr);$index&#61;0;for($i&#61;0;$i<$n;&#43;&#43;$i){if($arr[$i]!&#61;$value)$arr[$index&#43;&#43;]&#61;$arr[$i];}return $index;
}

2.1.16 Plus One
描述
Given a number represented as an array of digits, plus one to the number.

function plusOne(&$arr)
{if(false&#61;&#61;&#61;is_array($arr)) return false;$addNum&#61;0;$yu&#61;1;foreach( $arr as $key&#61;>$value ){$value&#43;&#61;$addNum&#43;$yu; $yu&#61;$value/10;$value&#61;$value%10;$arr[$key]&#61;$value;//注意改变$value 不会影响数组的$arr大小。}
}

3.4 Add Binary
描述
Given two binary strings, return their sum (also a binary string).
For example,
a &#61; “11”
b &#61; “1”
Return ”100.

function addBin($a,$b)
{if(empty($a)&&empty($b)) return NULL;if(empty($a)) return $b;if(empty($b)) return $a;$arr&#61;str_split(strrev($a));/*注意将字符串直接强制赋给数组$str&#61;111&#61;>array(0&#61;>&#39;111&#39;);得使用str_split转为array(0&#61;>&#39;1&#39;;1&#61;>&#39;1&#39;;2&#61;>&#39;1&#39;); */$brr&#61;str_split(strrev($b));$n&#61;count($arr); $m&#61;count($brr);$yu&#61;0;$newstr&#61;null;//为空$maxn&#61;$n<$m?$m:$n;for($i&#61;0;$i<$maxn;&#43;&#43;$i){$ar&#61;$i<$n?$arr[$i]:0;$br&#61;$i<$m?$brr[$i]:0;$value&#61;$ar&#43;$br&#43;$yu;$yu&#61;$value/2;$newstr.&#61;$value%2;}var_dump($newstr);return strrev($newstr);
}

2.1.17 Climbing Stairs
描述
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
分析
设f(n) 表示爬n 阶楼梯的不同方法数&#xff0c;为了爬到第n 阶楼梯&#xff0c;有两个选择&#xff1a;
. 从第n … 1 阶前进1 步&#xff1b;
. 从第n … 1 阶前进2 步&#xff1b;
因此&#xff0c;有f(n) &#61; f(n -1) &#43; f(n-2)。
这是一个斐波那契数列。也是动态规划中的一种

常见的写法&#xff1a;是从上往下
function calWays($n)
{if($n&#61;&#61;0) return 0;if($n&#61;&#61;1) return 1;if($n&#61;&#61;2) return 2; return calWay($n-1)&#43;calWay($n-2);
}
但是这种方法会出现重复计算的情况&#xff0c;如下图

这里写图片描述

浪费时间&#xff0c;采用从下往上的计算方法

function calWays($n)
{if($n&#61;&#61;0) return 0;if($n&#61;&#61;1) return 1;if($n&#61;&#61;2) return 2; $m&#61;3;$f&#61;array(0,1,2); while($m<&#61;$n){$f[$m]&#61;$f[$m-1]&#43;$f[$m-2];$m&#43;&#43;;}return $f[$n];
}
这样减少了重复计算的次数&#xff0c;但是增加了空间复杂度&#xff0c;可以进行简化
function calWays($n)
{if($n&#61;&#61;0) return 0;if($n&#61;&#61;1) return 1;if($n&#61;&#61;2) return 2; $m&#61;1;$prev&#61;0;$curr&#61;1;while($m<&#61;$n){$temp&#61;$curr;$curr&#43;&#61;$prev;$prev&#61;$temp;$m&#43;&#43;;}return $curr;
}

递归和循环(取自剑指offer)
这里写图片描述


推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了如何在使用emacs时去掉ubuntu的alt键默认功能,并提供了相应的操作步骤和注意事项。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
author-avatar
DXJ健康快乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有