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

【C语言】C语言基础习题详解(牛客网)&&二分查找逻辑

也就是说,如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。...,因为mid与目标值不相等,那么left就变成mid+1; target与目标值不相等,那么right就变成mid-1; 每次缩小范围后都需要继续执行上述步骤...,我们可以使用一个while循环,当left循环,直到找到目标值对应的下标,返回下标;或者没有目标值对应的下标,返回-1; 5.2.3 代码示例 按照这个思路,我们编写一下我们的代码...for循环遍历数组实现 最低股价我们假设数组的第一个元素是最低股价,然后与当前股价比较得出最低股价 每一天的最大利润是当前股价减去最低股价 比较每天的最大利润,得出所有最大利润中的最大利润返回 没有利润则返回...,我们可以使用一个while循环,当left循环,直到找到目标值对应的下标,返回下标;或者没有目标值对应的下标,返回-1; 7.3 题目练习 我们找到一个题目来练习一下 7.3.1 题目描述

12810

【数据结构】数组和字符串(九):稀疏矩阵的链接存储:十字链表的插入、查找、删除操作

COL:存储该节点在矩阵中的列号。 VAL:存储该节点的元素值。   每一行都有一个表头节点,它引导着该行的循环链表,循环链表中的每个节点按照列号的顺序排列。...同样,每一列也有一个表头节点,它引导着该列的循环链表,循环链表中的每个节点按照行号的顺序排列。   ...关于循环链表: 【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵的十字链表中,每一行和每一列都有一个表头节点。...从第一行开始遍历稀疏矩阵的每一行: 通过行表头节点数组获取当前行的行链表头节点。 遍历当前行的行链表,直到找到要查找的节点或遍历完整个链表。...否则,遍历行链表,直到找到要删除的节点的前一个节点: 将前一个节点的右指针指向要删除的节点的右指针。

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

    LeetCode刷题记录(easy难度21-40题)

    很容易可以看出,每一行第i位上的数字,等于上一行的i位数加上i+1上的数。 同时我们可以看到,每一行第一个数都是1 我们在求出每一行的列表之后,放入到保存所有行的列表中即可。...,因为我每一行的列表row,一直是一个,当每次循环操作的是同一个row,如果不使用深拷贝,最后append到列表中的都是最后一行的值,所以这里使用深拷贝,将每一行的值拷贝出来append到列表中。...题意分析: 给定一个行数,生成帕斯卡三角形该行的数。 思路分析 这一题其实只是上一题的一部分,生成第n行的列表即可。 首先,每一行的第一个数都是1,我们就可以创建一个第一个元素为1的列表。...在这里我们使用字典将遍历过的值和下标记录下来,循环列表中每一个值,在每一次循环中判断目标值减去遍历的值等于的结果是否在存有已经遍历过的元素字典中,如果存在那就返回这两个下标,由于下标不是从0开始,所以我们需要将下标...在这里我们使用字典将遍历过的值和下标记录下来,循环列表中每一个值,在每一次循环中判断目标值减去遍历的值等于的结果是否在存有已经遍历过的元素字典中,如果存在那就返回这两个下标,由于下标不是从0开始,所以我们需要将下标

    1.4K10

    手敲一遍数据结构和排序算法 Java

    public void bulbSort(int[] arr) { // 当前个与后一个相比,所以外循环只需n-1次 for (int i = 0; i < arr.length-1; i++)...public void selectionSort(int[] arr) { // 当前个与后一个相比,所以外循环只需n-1次 for (int i = 0; i 一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置...i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 再重复执行2,3二步,直到i==j,将基准数填入a[i]中。...j>=inc:保证j-inc非负 // key与前一个元素的值比较 // j-=inc:指向当前组的前一个元素 for (j = i; j

    43440

    手敲一遍排序算法 Java

    public void bulbSort(int[] arr) { // 当前个与后一个相比,所以外循环只需n-1次 for (int i = 0; i < arr.length-1; i++)...public void selectionSort(int[] arr) { // 当前个与后一个相比,所以外循环只需n-1次 for (int i = 0; i 一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置...i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 再重复执行2,3二步,直到i==j,将基准数填入a[i]中。...j>=inc:保证j-inc非负 // key与前一个元素的值比较 // j-=inc:指向当前组的前一个元素 for (j = i; j

    34030

    2024重生之回溯数据结构与算法系列学习(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

    new LNode; // 创建新节点 s->data = val; // 将输入值赋给新节点 r->next = s; // 将当前尾节点的...= q->data) { cout 该循环链表不对称" 不相等,链表不对称 return; // 返回...题目:设有一个带头结点的循环单链表,其结点值均为正整数。...设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点从中删除,直到单链表空为止,再删除表头灶占 解题思路: >定义几个工作指针 >每次遍历找到最小值将其删除 >直到表为空 实现代码:...pred(前驱指针).data (数据)和 next (后继指针)域外,还有一个访问频度域freq.在链表被启用前,其值均初始化为零。

    9210

    剑指Offer(四)-- 非递归解法重建二叉树

    ,请重建出该二叉树。...我们可以一开始创建一个栈,分别用两个指针执行前序遍历和中序遍历的第一个元素,先将前序遍历的第一个元素压入栈中,因为前序遍历的特性,第一个元素肯定是根节点。...开始循环,对比栈顶的元素和中序遍历数组的元素 2.1 把栈顶元素和中序遍历的元素对比,相等则弹出之后,继续对比下一个元素与当前的栈顶元素,直到不相等为止。...1 如果不相等,说明当前栈顶元素还有左子树,因为如果没有左子树的话,前序的第一个元素和中序的第一个元素应该相等。既然有左子树,那么前序遍历指针指向的元素就是它的左子树根节点,建立关系,压栈。...和栈顶元素 1,不相等,那么说明有左子树,前序遍历的第 2 个元素 2 就是左子树节点,关联成左子树,压栈: 同样的不相等,会持续压栈: 直到,中序遍历的第一个元素 4,已经等于栈顶元素 4,说明

    36820

    干货 | 时间序列数据的对齐和数据库的分批查询

    2.2 问题分析 这里我们将一张表的信息用一个 list 的形式来表示: 每一行记录为这个列表的一个元素,每行记录用一个元组tuple (python中另一个常用的数据结构,与list的区别在于list...分解一下任务流程: 从数据库中读取一批数据 对该批数据进行处理 2.1 对当前行进行处理 2.2 判断是否存在下一行: 存在:跳到下一行,回到2.1 不存在:回到1 ?...发现了吗,这里存在两个循环的过程:1是通过循环遍历整个数据库,2是通过循环遍历每个批次中的每一行。 这种遍历我们称为迭代(Iteration)——可以说这是Python最强大的功能之一了。...3.2.1 迭代器的基本认识 迭代器是一个可以记住当前遍历位置的对象。(python里面一切皆对象) 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。...如果遍历完想再遍历一遍,就需要重新再创建一个迭代器。

    3.1K50

    【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

    ROW:存储该节点在矩阵中的行号。 COL:存储该节点在矩阵中的列号。 VAL:存储该节点的元素值。   每一行都有一个表头节点,它引导着该行的循环链表,循环链表中的每个节点按照列号的顺序排列。...同样,每一列也有一个表头节点,它引导着该列的循环链表,循环链表中的每个节点按照行号的顺序排列。   ...关于循环链表: 【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵的十字链表中,每一行和每一列都有一个表头节点。...释放所有节点的内存: 遍历每一行,从第一行到最后一行: 通过行表头节点数组获取当前行的行链表头节点。...遍历当前行的每一列,从第一列到最后一列: 如果当前节点存在且与当前列匹配,则打印节点的值。 否则,打印0。 打印换行符。 5.

    24310

    华为OD 2023机试题java python c++ go rust ,javascript

    给定一个字符串 s ,找出这样一个子串: 1)该子串中的任意一个字符最多出现2次; 2)该子串不包含指定某个字符; 请你找出满足该条件的最长子串的长度。...输入描述:第一行为要求不包含的指定字符,为单个字符,取值范围0-9a-zA-Z 第二行为字符串s,每个字符范围0-9a-zA-Z,长度范围1,10000 输出描述:一个整数,满足条件的最长子串的长度;如果不存在满足条件的子串...如果新加入的字符已经出现过2次,我们就收缩窗口的左侧边界,直到移除了一个重复出现的字符。 我们重复这个过程,直到right指针遍历完整个字符串,就可以得到满足条件的最长子串长度。...利用n & (n - 1)会将n的最后一个1变为0的特性。 每循环一次,就找到一个1,并将其变为0。循环终止的条件是n变为0,count的值就是n中1的个数。...   // 找到一个1,count变为1,n变为0,循环终止,count值为1所以时间复杂度是O(k),k是n中1的个数。

    24900

    数组还可以这样用!常用但不为人知的应用场景

    { System.out.print(array[i][j] + " "); } System.out.println();}  这个例子中,我们首先使用一个外层循环来遍历每一行...,然后在内层循环中遍历每一列。  ...这个旋转公式可以这样理解:结果矩阵中的每一行都等于原始矩阵中的每一列,但是顺序被反过来,且行列索引值有所变化。  最后,返回旋转后的矩阵result。...接下来使用 for 循环遍历数组,如果当前元素和后一个元素不相等,则将当前元素添加到去重后的数组中,并将变量 j 加 1。  ...接下来,使用循环遍历 count 中的所有元素,并找出出现次数最多的元素,并将其值赋给了 mostFrequentElement 变量。最后,该方法返回了出现次数最多的元素。

    33221

    66道前端算法面试题附思路分析助你查漏补缺

    从第一个节点开始向后遍历,首先将当 前节点的后继节点保存到 next 中,然后将当前节点的后继节点设置为 pre,然后再将 pre 设置为当前节点,current 设置为 ne xt 节点,实现下一次循环...对 k 以后的元素遍历时,我们将该元素与堆的最大值进行比较,如果比最 大值小,那么我们则将最大值与其交换,然后调整堆。如果大于等于堆的最大值,则继续向后遍历,直到数组遍历完成。...为了保证删除 之后的链表仍然是相连的而没有中间断开,我们要把当前的前一个结点和后面值比当前结点的值要大的结点相连。我们要确保 prev 要始终与下一个没有重复的结点连接在一起。 57....每 一个栈遍历完成后进入下一层循环。 详细资料可以参考: 《按之字形顺序打印二叉树》 60. 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。...为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前的层中还 没有打印的结点数,另一个变量表示下一次结点的数目。 61.

    1.8K20

    算法笔记(一)

    idx 初始值为 0 然后从题目的「要求/保留逻辑」出发,来决定当遍历到任意元素 x 时,应该做何种决策: 如果当前元素 x 与移除元素 val 相同,那么跳过该元素。...== nums[j]) { // 当遍历的当前值与有效数组的最后一位不相等时 nums[++j] = nums[i]; // 将当前值添加到有效数组的下一位 } }...return j + 1; // 返回有效数组的长度 }; 时间复杂度:O(n) 空间复杂度:O(1) 解析: 当遍历的值与j相等时,意味着是「重复元素」,因此不进入判断直接跳过; 当不相等时进入判断...当超过k个元素时,我们需要将当前需要插入的元素与前k个元素进行比较:如果相等,那么直接跳过,因为已经有k个元素重复了(大前提是数组有序);如果不相等则将当前值放入有效数组的下一位。...subLength : result; // 选取较小值更新结果 sum -= nums[left++]; // 累加和满足条件后,将左区间右移,并减去左区间当前值,直到不满足条件后进行下一次外层循环

    61810

    十、为影院添加影片及座位安排《仿淘票票系统前后端完全制作(除支付外)》

    : 首先选中时,咱们需要对当前影院的影片ID值赋值,为其新增一个ID内容,这个ID内容必须从获取到的影院ID上进行追加,所以在此还需要新建一个影片ID列表: 随后当循环遍历的影院内容的id对其进行赋值...随后创建两个循环用于遍历这个二维数组: 一位数组用一个循环,那么二维数组就用2个循环,第一个循环得到是每一行的内容,第二个循环得到是这一行中的每一个内容,因为一位数组是一个数组列表,那么二位数组就是多个数组列表就行纵向的排列...,所以在循环给值时,第一个循环直接给这个座位矩阵即可,第二个循环直接给到这些纵向内容的每一行即可,也就是第一个循环得到的内容。...第一个循环的数据来源: 第二个循环的数据来源: 随后在内部的数据中添加两个if 容器,用于判断当前循环到的值: 第一个循环容器直接判断当前的值是否是1,1表示有作为,0表示空座位...,咱们只需要在值等于1时创建一个座位信息,这个座位信息咱们暂时用一个方块显示,这个方块为黄色: 这个条件容器的判断如下: 接着创建一个有座位的判断,判断当前循环到的值是否是1,如果不是的话

    41140

    【力扣算法14】之 15. 三数之和 python

    在每次遍历中,使用两个指针 left 和 right 分别指向当前元素 nums[i] 的下一个元素和数组的最后一个元素。...进一步避免重复计算:如果左指针所指的元素与下一个元素相等,则将左指针右移一位,直到不相等为止;同理,如果右指针所指的元素与前一个元素相等,则将右指针左移一位,直到不相等为止。...初始化一个空列表 res ,用于存储结果。 开始遍历数组,以每个元素 nums[i] 作为基准。 如果当前元素与前一个元素相等,则跳过,以避免重复计算。...进一步避免重复计算:如果左指针所指的元素与下一个元素相等,则将左指针右移一位,直到不相等为止; 同理,如果右指针所指的元素与前一个元素相等,则将右指针左移一位,直到不相等为止。...if i > 0 and nums[i] == nums[i-1]: continue:如果当前元素与前一个元素相等,则跳过循环,以避免重复计算。

    13610

    【Python入门第十二讲】循环语句

    语法格式:while 条件: # 执行的代码块图片在这个语法结构中,条件 是一个表达式,如果它的值为 True,则执行循环体中的代码块,直到条件变为 False 为止。...range() 基本语法:range(start, stop, step)start: 序列的起始值,默认为 0。stop: 序列的结束值(不包含该值)。step: 序列的步长,默认为 1。...: print(item, end=' ') print() # 换行输出结果为:1 2 3 4 5 6 7 8 9 外层循环遍历了 matrix 列表的每一行,内层循环遍历了每一行中的元素...continue 语句通常与条件语句配合使用,用来检查某些条件是否满足,一旦条件满足就跳过当前迭代。它在循环体内的任何位置都可以使用。...无限循环无限循环是指在程序中创建一个循环结构,其条件永远为真,因此循环会无限地执行下去,直到程序被强制停止或出现异常为止。在 Python 中,可以使用 while 循环来创建一个无限循环。

    52510

    批处理for命令的用法_批处理主要解决

    如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。 示例 rem 遍历当前目录下所有目录,"/\."...示例 rem 从1开始,以2为步进值,循环到不超过10(包括等于) for /l %%i in (1, 2, 10) do @echo %%i rem 从10开始,以-2为步进值,循环到不小于0(...处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。 以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。...3.4.3 示例 rem 读取当前目录的a.txt,并显示每一行的内容(每一行内容遇到空格即终止) for /f %i in (a.bat) do @echo %i rem 读取多个文件,并显示每一行的内容...setlocal enabledelayedexpansion 启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。

    1.9K30

    Java数组

    操作符 数组的两种定义方式: 第一种 动态初始化 构建方法为创建一个int类型引用赋值给number变量 元素的值可以更改 int[] number = new int[2];//单独定义前必须先声明...分析图: 当一个数组类型的变量被声明后,在内存中会在栈里生成一个该数组的变量名。 当使用new操作符定义了数组的大小后,在堆里面创建数组每个元素为默认值的内存。...col表示整个数组总共有多少列 value 表示每个坐标对应的元素 第一行的value表示整个数组总共有多少个元素 以下是原数组的代码: 遍历完所有元素后 就需要把所有的无效元素剔除掉 然后需要再遍历一次数组找到那些有效的值...确定了有效元素后 便可以创建稀疏数组的列表了 按照列表格式创建列表头: 总共有3列值 分别是 行 列 值 稀疏数组总共有多少行取决于原数组的有效元素有多少个 在这个基础上要加上列表头的那一行 所以就是...前一个元素比后一个元素大,就交换位置。直到交换到最后一个元素。 每交换一轮,较大的元素会被排在最后面,较小的元素则会排在最前面 每轮排序的元素越来越少,直到没有元素可以交换为止。

    1.9K30
    领券