首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3分钟短文 | PHP 遍历数组,怎么锁定第一个最后一个元素?

引言 对于数组遍历,使用一个 foreach 几乎就完全够用了。那么你一般在编写代码的时候,怎么判断是循环的第一个元素,最后一个元素呢? 本文通过几个示例,展示实现此功能的多种方法。 ?...如果是第一个,则 i == 0;如果是最后一个,则 $i = 0; $len = count($array); foreach ($array as $item) { if ($i == 0)...我们试着从PHP数组操作函数上着手,内置函数中提供了 reset,用于将指针指向数组第一个元素;end 函数,将指针指向数组最后一个元素。...而 foreach 循环内将元素匹配到 key => PHP数组操作函数为我们提供了思路,那么当然还可以用 prev 函数,返回前一个元素的值;使用 next 函数,获取下一个元素的值。...next( $items ) ) { echo 'Last Item'; } } 写在最后 本文通过三种方式实现了定位 foreach 循环体内,第一个元素最后一个元素的方法。

2.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

在排序数组中查找元素的第一个最后一个位置

在排序数组中查找元素的第一个最后一个位置 给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。...len(nums) and nums[right + 1] == target: right +=1 return [left, right] # 解法3 # 1、首先,在 nums 数组中二分查找得到第一个大于等于...target的下标(左边界)与第一个大于target的下标(右边界); # 2、如果左边界<= 右边界,则返回 [左边界, 右边界]。...= target: return [leftBorder, rightBorder] return [-1, -1] # 解法4 # 1、首先,在 nums 数组中二分查找得到第一个大于等于...target的下标leftBorder; # 2、在 nums 数组中二分查找得到第一个大于等于 target+1的下标, 减1则得到rightBorder; # 3、如果开始位置在数组的右边或者不存在

4.6K20

刷题2:在数组中查找元素的第一个最后一个位置

题目:给定一个的整数数组 nums, 一个目标值 target。找出给定目标值在数组中的开始位置结束位置。...题目解析: 1.给定一个数组,确定的是一个数组数组是整数,那么我们可以知道,那么target的也是整数。...2.要求target的在数组中开始位置结束位置,我们可以先找出来target的在list里面的下标位置,把这些下标位置放到list里面,我们去取list里面的第一个元素最后一个元素,就是对应的开始位置结束位置...从这期开始,我们的代码将用python java两个版本去实现,同时从两方面去提高我们的,同时 也面向了两门语言的学习者。...那么我们测试完毕,根据测试覆盖率来说,我们目前的测试是已经完成了覆盖了百分之百的路径代码。 后续会陆续给大家分享更多的题目,更多的代码,大家一起成长,一起刷题。

2K20

LeetCode-34-在排序数组中查找元素的第一个最后一个位置

# LeetCode-34-在排序数组中查找元素的第一个最后一个位置 给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。...0时,直接返回[-1,1] 当数组长度为1时,判断第一个数字是否等于target,等于则返回[0,0],否则返回[-1,-1] 初始化头尾指针 移动头指针,直到找到第一个等于target的位置,如果找完了都没有找到...,返回[-1,-1] 移动尾指针,直到找到最后一个等于target的位置,如果找完了都没有找到,返回[-1,-1] 当头尾指针相同时,说明只有一个target,返回当前位置[start,start]或[...target,这时候只需要查找另外一个边界等于target的即可,可以进行循环移动查找,最后返回[start,end]即可 如果没有找到,返回[-1,-1] 方法3、递归分治(low): 通过二分查找切分数组寻找左右子数组的...target位置,迭代到只有一个,判断是否是目标值,返回一个都是当前index的数组,然后进行合并即可 方法4、二次二分找左右边界(fast): 第一次二分找左边界,第二次二分找右边界,找左边界时向右逼近

2.2K20

Leetcode No.34 在排序数组中查找元素的第一个最后一个位置

一、题目描述 给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。...-109 <= target <= 109 二、解题思路 使用二分法查找第一个位置,初始化两个变量low=0,hight=nums.length-1 1、当low>high时,表示没有找到,返回-1...4、假如nums[mid]等于target且nums[mid]比相邻的左侧元素大,返回下标mid 5、当目标值小于等于nums[mid]时,说明目标值在左侧,往左侧递归查找,否则往右侧递归查找 查找最后一个位置同理...mid-1]<nums[mid])){ return mid; } if(target<=nums[mid]){ //寻找第一个位置...mid]<nums[mid+1]){ return mid; } if(target>=nums[mid]){ //寻找最后一个位置

1.9K10

leetcode34-在排序数组中查找元素的第一个最后一个位置

前言 今天刷的题目是:在排序数组中查找元素的第一个最后一个位置,这道题目在最开始AC以后,然后做了两步的优化操作,供大家参考。...题目 leetcode-34:在排序数组中查找元素的第一个最后一个位置 分类(tag):二分查找这一类 英文链接:https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array...nums,一个目标值 target。...找出给定目标值在数组中的开始位置结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。...至于找最右侧的下标就是,将left=mid+1,来去逼近最右侧的下标; 如果没有找到则说明不存在返回-1; 示例 这里举一个例子帮助大家理解,对于数组[1,2,4,4,4,4,4,5,6],找4的最左下标

2.6K30

在排序数组中查找元素的第一个最后一个位置(leetcode34)

给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。...示例 1: 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 解析: 方法一:二分查找 二分查找中,寻找leftIdx 即为在数组中寻找第一个大于等于 target...的下标,寻找 rightIdx 即为在数组中寻找第一个大于target 的下标,然后将下标减一。...两者的判断条件不同,为了代码的复用,我们定义 binarySearch(nums, target, lower) 表示在 nums 数组中二分查找 target 的位置,如果 lower 为 true,...则查找第一个大于等于 target 的下标,否则查找第一个大于target 的下标。

1.7K10

在排序数组中查找元素的第一个最后一个位置

前言 今天主要讲解的内容是:如何在已排序的数组中查找元素的第一个最后一个位置。以 leetcode 34 题作为例题,提供二分查找的解题思路,供大家参考。...题目详述 给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。...举栗 以 nums = [5,7,7,8,8,10], target = 8 为栗子,通过下图来找出目标值 8 在数组中出现的第一个最后一个位置。...end: 由于此时 high < low,代表查找 8 在数组中出现的第一个位置结束。 查找 8 出现的最后一个位置: start: 前两步跟查找 8 出现的第一个位置一样 ?...查找元素的第一个最后一个位置代码: // C语言版本 int GetTargetPosition(int* nums, int numsSize, int target, int locFlag)

2.5K20

LeetCode题目34:在排序数组中查找元素的第一个最后一个位置

原题描述 + 给定一个按照升序排列的整数数组 nums,一个目标值 target。找出给定目标值在数组中的开始位置结束位置。 你的算法时间复杂度必须是 O(log n) 级别。...如果数组中不存在目标值,返回 [-1, -1]。...leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array 思路解析 + 毫无疑问,时间复杂度O(log n)升序数组...但如果复用上面的逻辑,每次挪动时令lower=mid+1,那么最终lower一定会与higher相撞于最后一个target的后一个位置。此时lower-1才是所求。...实现时,为了能重用二分查找逻辑,可以增加一个参数来控制寻找左边界还是右边界。

3.1K20

java二维对象数组_java 二维数组对象数组

1.二维数组二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={ {1,2},{2,3},{3,4,5}}; 2) int [][] intB...int型 @5e265ba4是内存地址6 7 //声明一一个二维数组,用于存储3个一维数组,每一个一维数据存多少个数组,不知道 ,null 8 int [][]intB=new int[3][];9 intB...2]; //2 12 System.out.println(intB[1]);//[I@156643d4 13 System.out.println(intB[1][1]);//214 15 //声明一个二维数组...intC);19 20 }21 } 3.二维数组的遍历 1) 普通 for 循环 2) 加强 for 循环 3) 普通 for 循环+加强 for 循环 public classTestArray3 {..., arr迭代变量, intA二维组的名称 for(int i:arr){ //int,一维数组中元素的类型,i,迭代变量,arr,一维数组的名称 System.out.print(i+”\t”); }

2.9K20
领券