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

为什么在数组的这种线性搜索的while循环条件中,!found而不是found是必需的?

在数组的线性搜索中,我们使用一个while循环来遍历数组并查找目标元素。循环条件通常是一个布尔表达式,用于判断是否继续循环。在这种情况下,我们使用!found作为循环条件,而不是found。

这是因为我们希望在找到目标元素时退出循环。当我们找到目标元素时,我们将found设置为true,然后在循环条件中使用!found来判断是否继续循环。如果我们使用found作为循环条件,那么当找到目标元素时,循环条件将变为false,循环将终止。

使用!found作为循环条件的好处是,它更直观地表达了我们的意图。我们希望在找到目标元素时继续循环,而不是在找到目标元素时终止循环。这种表达方式更符合我们思考问题的方式,使代码更易于理解和维护。

另外,使用!found作为循环条件还可以避免一些潜在的错误。如果我们不小心在循环体内忘记设置found为true,那么使用!found作为循环条件将导致无限循环,这样我们可以更容易地发现并修复这个错误。

总结起来,使用!found而不是found作为数组线性搜索的while循环条件是为了更好地表达我们的意图,使代码更易于理解和维护,并且可以避免一些潜在的错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

手把手教你用Python实现查找算法

01 线性查找 查找数据最简单策略就是线性查找,它简单地遍历每个元素以寻找目标,访问每个数据点从而查找匹配项,找到匹配项后,返回结果,算法退出循环,否则,算法将继续查找,直到到达数据末尾。...线性查找明显缺点,由于固有的穷举搜索,它非常慢。它优点无须像其他算法那样,需要数据排好序。...线性查找性能:如上所述,线性查找一种执行穷举搜索简单算法,其最坏时间复杂度O(N)。 02 二分查找 二分查找算法前提条件数据有序。...03 插值查找 二分查找基本逻辑关注数据中间部分。插值查找更加复杂,它使用目标值来估计元素在有序数组大概位置。...让我们试着用一个例子来理解它:假设我们想在一本英文词典搜索一个单词,比如单词river,我们将利用这些信息进行插值,并开始查找以字母r开头单词,不是翻到字典中间开始查找。

58610

用JavaScript实现二叉搜索

通过这种方式,二叉搜索查找值变得非常简单,只要你要查找值小于正在处理节点则向左,如果值更大,则向右移动。二叉搜索不能有重复项,因为重复会破坏这种关系。下图表示一个简单二叉搜索树。...主要区别在于你要寻找放置新值位置,不是查找值: BinarySearchTree.prototype = { //more code add: function(value...通过处理左子树,然后节点本身,然后右子树,每个节点上执行有序遍历。由于二叉搜索树以这种方式排序,从左到右,结果节点以正确排序顺序处理。...使用 size()情况下,函数只是递增长度变量, toArray() 使用函数将节点值添加到数组。...遍历使用 while 循环 replacement 和 replacementParent 变量完成

58010

【手绘漫画】面试必考之二分查找(解题模板和深度剖析),上回

看到了吧,基本上十人九错,,, 什么二分查找? 二分查找计算机科学中最基本、最有用算法之一。它描述了在有序集合搜索特定值过程。...二分法查找,也称为折半法,一种在有序数组查找特定元素搜索算法。...—— 我们用来应用条件来确定我们应该向左查找还是向右查找索引; 代码大体都没啥问题,就是边界条件,比方说:while 不等号是否应该带等号,right 和 left 是不是要让 mid 加一等等。...其实如果题目告诉你 排序数组,其实就是【疯狂暗示】你用二分查找。 那么有哪些地方需要注意呢? 为什么 while 循环条件 <=,不是 < ?...当然,找到了 target 时终止,或者 while 条件不符时: 找到时: if(nums[mid] == target) return mid; 但如果没找到: 就需要 while 循环终止,

40820

元老与新秀:Go sort.Search()和sort.Find()

n 定义了搜索范围大小(从 0 到 n,不包括 n), f 一个接受整数输入并返回布尔值函数。Search 函数返回一个整数,表示满足 f 条件最小索引。...Search 函数查找这个转变发生点。 二分查找逻辑: 初始化两个指针 i 和 j,分别代表搜索范围开始和结束。开始时,i 为 0,j 为 n。 i < j 条件循环执行。...会在一个已排序切片中进行二分查找(因此比线性搜索要快得多,尤其处理大型数据集时性能尤其明显), 最后返回一个索引,这个索引指向切片中第一个不小于指定值元素。...它目的一个满足特定条件有序集合查找一个元素,并返回该元素索引和一个布尔值,表示是否找到了该元素。...二者实现非常相近,都有用二分搜索 Find第二个入参,也是一个func,但要求这个func返回值int不是bool.另外Find返回值有两个,第二个返回值bool,代表没有找到指定元素 sort.Find

15210

04-【久远讲算法】链表——实现无序列表

数组储存类型 顺序存储:数组在内存顺序存储,具体是什么样子呢? 内存由一个个连续内存单元组成,每一个内存单元都有自己地址。在这些内存单元,有些被他数据占用了,有些空闲。...什么链表 计算机科学,链表一种常见基础数据结构,一种线性表,但是并不会按线性顺序存储数据,而是每一个节点里存到下一个节点指针。...在数组章节,我们考虑了很多情况,末尾,开头,中间加入新元素,尤其将元素插入到数组中间,处理起来非常费劲,插入一个元素,剩下不少元素都要为它腾出位置。...如果被删除元素正好链表头节点所包含元素的话,那么 cur会指向头节点, pre 则依旧为它默认值 None,在这种情况下,我们只需要修改 cur 即可,告诉它头节点变成了它后面那个节点,不再它本身就可以了...如果 pre 不是 None,则说明需要移除节点在链表结构某个位置。在这种情况下,pre 指向了 next 引用需要被修改节点。

40600

Python五个隐藏特性,你可能从未听说过

是的,你没看错,Python...一个有效构造。...称为省略号单例对象。如果你把它输入到Python解释器,你可以看到它: >>> ......Ellipsis 根据官方文档,省略号“一种特殊值,主要与用户定义容器数据类型扩展切片语法结合使用”。它有两个主要用例。一种空函数充当占位符体。...循环 Python有两个不同循环,for和while。两者都可能“坏”。也就是说,如果满足了某个条件,就可以跳出循环。...现在,假设我们要找一个特定条件。如果满足该条件,则将结果保存在一个名为found标志。然后,如果我们没有找到它,我们打印一条消息。...,所以您可以使用for不是while

45330

计算机程序思维逻辑 (9) - 强大循环

循环 上节我们介绍了流程控制条件执行,根据具体条件不同执行不同操作。本节我们介绍流程控制循环,所谓循环就是多次重复执行某些类似的操作,这个操作一般不是完全一样操作,而是类似的操作。...凭借循环,计算机能够非常高效完成人很难或无法完成事情,比如说,大量文件查找包含某个搜索文档,对几十万条销售数据进行统计汇总等。...for循环简化了书写,但执行过程对初学者而言不是那么明显,实际上,它执行流程这样: 执行初始化指令 检查循环条件是否为true,如果为false,跳转到第6步 循环条件为真,执行循环体 执行步进操作...for,每个语句都是可以为空,也就是说: for(;;){} 有效,这是个死循环,一直空转,和while(true){}效果一样。可以省略某些语句,但分号;不能省。...比如说,一个数组查找某个元素时候,循环条件可能数组结束,但如果找到了元素,可能就会想提前结束循环,这时候可以使用break。

1.3K80

C#基础搜索算法

顺序搜索算法 最直接搜索类型就是从数据开始处顺次遍历每条记录, 直到找到所要记录或者到达数据末尾. 这就是所谓顺序搜索. 顺序搜索(也被称为线性搜索)是非常容易实现....一个有 序数组, 搜索最小值和最大值很容易工作. 但是, 一个无序数组, 这就是一 个不小挑战了. 下面就从找到数组最小值开始吧. 算法: ⅰ....第0 个元素位置循环开始前会作为初始最小值, 因此进行循环比较操作从第1 个元素开始. 在数组搜索最大值算法和搜索最小值方法相同. 先把数组首元素赋值给一个保存最大值变量....这种策略目的就是通过把频繁搜索数据项放在数据开始处来最小化搜索一个元素所需要循环次数. 随着多次查询进行, 最终结果就是最频繁被搜索元素都会被放置开始部分....为了使用这种算法, 首先需要 把数据按顺序(最好升序方式)存储到数组内(当然, 其他数据结构也可行). 算法第 一步就是设置搜索上界和下界. 搜索刚开始时, 就是数组上限和下限.

93320

线性结构 数组与链表

数组或列表 数组(Array)编程界最常见数据结构,有些编程语言被称作位列表(List)。几乎所有编程语言都原生内置数组类型,只是形式向略有不同,因为数组最简单内存数据结构。...数组定义:一个存储元素线性集合(Collection),元素可以通过索引(Index)来任意存取,索引通常是数字,用来计算元素之间存储位置偏移量。...链表 数组缺点:要存储多个元素,数组(或列表)可能最常见数据结构。但是数组不总是组织数据最佳结构。大多数编程语言中,数组大小固定,所以当数组被填满时,再要加入新元素会非常困难。...并且从数组起点或中间插入或移除元素成本很高,因为需要将数组其他元素向前后平移。 链表(Linked list)元素在内存不是连续存放。...双向链表(Doubly linked list)和单向链表区别在于,链表节点引用是双向,一个指向下一个元素,一个指向上一个元素。

44930

文本处理三剑客之—awk

语句块 END语句块awk从输入流读取完所有的行之后即被执行,比如打印所有行分析结果这类信息汇总都是END语句块完成,它也是一个可选语句块,pattern语句块通用命令最重要部分,...如: $ awk {name[x++]=$2};END{for(i=0;i<NR;i++) print i,name[i]}' test 数组name下标一个自定义变量x,awk初始化x值为0,...第二个域值被赋给name数组各个元素。END模块,for循环被用于循环整个数组,从下标为0元素开始,打印那些存储在数组值。因为下标关健字,所以它不一定从0开始,可以从任何值开始。...tA,这里比较有意思,awk for …in 循环一个无序循环。...并不是数组下标1…n ,因此使用时候需要注意。 如何把一行竖排数据转换成横排?

1.1K30

《Algorithms Unlocked》读书笔记1——循环和递归

书中没有涉及编程语言,直接用文字描述算法,我用 JavaScript 对书中算法进行描述。 循环和查找 首先是三个简单查找。目的数组查找一个特定值。...array: 一个数组 x: 要查找值 // 简单线性查找 function linearSearch(array, x) { let answer = 'NOT-FOUND'; for...上面的两种方案进行for循环时都要进行i是否大于length判断和array[i]是否等于x两个判断。...所以当数组大到一定程度时候,第三个方案效率大于上面两个方案。 递归 递归指在函数对函数自身进行调用。 递归有两个特性: 必须有一个或对个基础情况,它是指不用递归直接计算出结果。...比如下面例子:当 n=0 时,基础情况发生,f(0) = 1; 程序每个递归调用一定是通过一系列关于同一个问题子问题求解最终迭代到基础情况。 下面一个经典递归例子,计算阶乘。

51730

(转载非原创)编程思想与算法leetcode_二分算法详解

答:要保证能遍历到数组第一个元素和最后一个元素。因为初始化 h 赋值 len(nums) - 1,即最后一个元素索引,不是 len(nums)。...为什么 while 循环条件 <=,不是 < ? 答:因为初始化 h 赋值 len(nums) - 1,即最后一个元素索引,不是 len(nums)。...答:用相同方法分析,因为初始化 h = len(nums) 不是 len(nums) - 1 。因此每次循环搜索区间」 [l, h) 左闭右开。...while(l < h) 终止条件 l == h,此时搜索区间 [l, l) 恰巧为空,所以可以正确终止。 为什么没有返回 -1 操作?如果 nums 不存在 target 这个值,怎么办?...为什么返回 l 不是 h? 答:返回l和h都是一样,因为 while 终止条件 l == h。

33320

Java 中文官方教程 2022 版(二)

之间区别在于,do-while循环底部评估其表达式,不是顶部。...下面的程序,BreakWithLabelDemo,类似于前一个程序,但使用嵌套 for 循环二维数组搜索一个值。...带标签 continue 语句跳过带有给定标签外部循环的当前迭代。下面的示例程序,ContinueWithLabelDemo,使用嵌套循环另一个字符串搜索子字符串。...do-whilewhile之间区别在于,do-while循环底部评估其表达式不是顶部。因此,do块内语句至少会执行一次。for语句提供了一种紧凑方式来迭代一系列值。...这是一种快捷方式,可以手动创建数组(前一个方法可以使用 varargs 不是数组)。 要使用 varargs,您需要在最后一个参数类型后面加上省略号(三个点,…),然后一个空格和参数名。

3600

Kotlin入门(7)循环语句操作

Koltin处理循环语句依旧采纳了for和while关键字,只是具体用法上有所微调。首先来看for循环,Java遍历某个队列,可以通过“for (item : list)”形式语句进行循环操作。...2、每次循环之后递增值不是1时候要怎么办? 3、循环方向不是递增而是递减,又如何好? 4、与条件判断有关变量不止一个,咋整? 5、循环过程变量,循环结束后还能不能使用?...所以更灵活解决方案,起止数值、条件判断、循环方向与递增值都应当在代码明确指定,“for (初始; 条件; 增减)”这个规则固然废除了,但开发者依旧能够使用while语句实现相关功能,Kotlin...while循环与Java处理一致,下面使用while进行循环判断代码例子: btn_repeat_begin.setOnClickListener { var poem...例如遍历诗歌数组,一旦某个诗句中找到“一”字,便迅速告知外界“我中奖啦”之类欢呼。

72420

Python实现线性查找

如果找到该项,则返回其索引;否则,可以返回null或你认为在数组不存在任何其他值。 下面Python执行线性查找算法基本步骤: 1.在数组第一个索引(索引0)处查找输入项。...Python实现线性查找算法 由于线性查找算法逻辑非常简单,因此Python实现线性查找算法也同样简单。我们创建了一个for循环,该循环遍历输入数组。...图1 下面线性查找算法函数实现。以下脚本函数lin_search()接受输入数组和要查找项作为其参数。 该函数内部,for循环遍历输入数组所有项。...在这种情况下,迭代所有数组项后,输入数组最后一个索引处找到该项。...显然,线性查找算法并不是查找元素列表位置最有效方法,但学习如何编程线性查找逻辑Python或任何其他编程语言中仍然一项有用技能。

3.1K40

深入 Python 流程控制

通常循环可能会依据一个等差数值步进过程(如 Pascal),或由用户来定义迭代步骤和中止条件(如 C ),Python  for 语句依据任意序列(链表或字符串)子项,按它们序列顺序来进行迭代...break 和 continue 语句, 以及循环 else 子句 break 语句和 C 类似,用于跳出最近一级 for 或 while 循环。...循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止情况下不会执行。...看仔细:else 语句属于 for 循环之中, 不是 if 语句。)...函数引用实际参数函数调用时引入局部符号表,因此,实参总是 传值调用 (这里 值 总是一个对象 引用 ,不是该对象值)。

59220

Kotlin学习之路(3)控制语句

xy } 这种写法感觉就像Java三元运算符(变量名 = 条件语句?...i奇数偶数即可完成,上述句号问题 } 但是使用Kotlin时候,Kotlin废除了for(初始;条件;增减) 这个规则,若想实现上述功能,取而代之则是for(i in 数组变量.indices...),其中indices表示数组变量下标数组,每次循环都从下标数组依次取出当前元素下标。...② 如果每次循环递增不是1怎么办? ③ 循环方向不是递增而是递减又怎么办? ④ 与判断条件变量有关不只有一个怎么办?...在我看来这些方法过于繁琐,日常开发因为业务千变万化,并非几种固定模式,虽然Kotlin废除了for(初始;条件;增减) 这个规则,但是开发者可以使用while语句实现相关功能,Kotlin

62920

开源图书《Python完全自学教程》6.5while循环语句

6.5 while 循环语句 for 循环必须以可迭代对象作为被循环对象,while 循环则不同,它是依据一定条件进行循环,即只要满足某条件循环语句“总跑着”。...print(i) ... 1 2 3 4 注意,上述代码 range(1, 10) ——如果 rang(10) 会是什么结果?为什么?...判断列表 nums 是否有大于 100 整数,若有,则 found = True ,并执行 break 结束循环。那么,此时注释(6)条件就不满足了。...否则,如果列表 nums 没有使 n > 100 成立整数,则 found = Fasle ,注释(6)条件语句就会执行。显然,程序 found 就相当于一个“开关”(常说“flag”)。...由此可见,else 分支不论 while 循环还是 for 循环,执行它条件都是一样

81120

图解实例讲解JavaScript算法,让你彻底搞懂

您希望尽可能地降低复杂性,最好避免超过 O (n) 复杂性。本文后续部分,您将看到每种表示法示例。现在,这就是您需要知道全部内容。算法什么算法,为什么要关心?....`;}checkForN(array, 10);这就是线性搜索算法。您以线性方式逐一搜索数组每个元素。线性搜索算法时间复杂度只有一个 for 循环会运行 n 次。...其中 n(最坏情况下)给定数组长度。这里迭代次数(最坏情况下)与输入(长度数组)成正比。因此,线性搜索算法时间复杂度线性时间复杂度:O (n)。...二进制搜索算法在线性搜索,您一次可以消除一个元素。但是使用二进制搜索算法,您可以一次消除多个元素。这就是二分查找比线性查找快原因。这里要注意一点,二分查找只对排序好数组有效。...第 6 行,如果没有找到匹配项,则中断内循环,并继续进行外循环下一次迭代。第 7 行,在内循环最后一次迭代返回true。朴素搜索时间复杂度循环中有循环(嵌套循环)。两个循环都运行 n 次。

82800
领券