| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【C语言】如何“查找”到你想要数字(二分查找,哈希表)——LeetCode刷题分享 -> 正文阅读 |
|
[数据结构与算法]【C语言】如何“查找”到你想要数字(二分查找,哈希表)——LeetCode刷题分享 |
目录 一、 介绍相信大家再日常学习生活中遇到难题常常会上网输入关键字,查找到你想要的答案;那么在C语言中如何查找到你想要的数据呢?初学C语言,老师肯定会让你试试在数组中找到指定的一个数,将他改成另一值;查找的方法多种多样,运用场景也千变万化,接下来我们一起来学习基础且实用的查找方法 ?二、顺序表查找2.1 认识与基础若给定一个数组,在数组中查找某一元素,并返回其下标。就像在衣柜里找衣服一样,按顺序一件一件的查找到你想要的就行。我们看看代码是如何实现的??
2.2 优化改进上述方法,每进入一次循环都要判断 i 是否越界,接下来介绍一个改进后的代码:若要查找数组下标从1到n中的某个元素,设置一个哨兵,每次与该哨兵比较,一起通过代码来理解??
2.3 例题:移除元素??LeetCode? 27.移除元素https://leetcode.cn/problems/remove-element/
?审题:最开始做这道题的时候可能会轻敌,移除元素不就只需要将查找到的元素删除吗,但这是个数组,并且题目要求返回删除后的长度,所以每次删除一个元素,需要将其后面的所有元素往前移一位,像这样你可以很简单的将其暴力地解出,但是效率会很低;这里我们介绍一个做题时常用且巧妙地方法:双指针(左右指针)
?图解: 三、有序表查找?如果说顺序表是从一堆衣服中找到你想要的,那么有序表就是从从小到大的套娃中找到想要的大小;🤔 3.1 二分查找?折半查找又称折半查找,顾名思义就是将一个有序的数组(升序)一中间数为“折痕”,将其折为两部分,左部分数小,右部分数大,联想二叉树,也是类似的二分法;
?时间复杂度:O(logn) 3.2 *插值查找
这样之后查找的效率提升了,但是二叉查找还是相对稳定一些; 四、散列表查找(哈希表)4.1 初步了解? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?参考文献:《大话数据结构》 设想你进入图书馆,如果你是社恐,肯定会像顺序表查找一样,在一个个书架里查找你想要的书,这样效率肯定会很差;但如果你善于社交,向图书管理员询问这本书的名字(key),那么他肯定会迅速的锁定这本书的地址,最后将书找出来给你。
4.2 哈希表的运用通过以上的了解,我们可以发现,哈希表可以用来储存也可以用来查找 ,在做题中大部分使用来储存的;废话不多说,我们用例题来深入的解析?? (1)初阶LeetCode 1748.唯一元素的和https://leetcode.cn/problems/sum-of-unique-elements/submissions/
思路分析: ? 这一题是一个非常明显的用哈希表计数的题,数组中每个元素作为key,用其指向哈希表中的一个储存空间; ? 简单的来说,就是用nums中的数作为哈希表的下标,遍历一遍nums,对每一个数对应指向哈希表的位置+1,则nums中恰好出现一次的数指向哈希表中的数为1,最后遍历哈希表中的数,判断其是否为1就行了 代码如下??
个人总结: 以我自己来看,哈希表就相当于我们数学里学的复合函数??g?( f?( x ) ) ,重点在于内函数的值作为外函数的变量。 接下来我们再通过一题来进一步熟练哈希表: (2)中阶??????2206. 将数组划分成相等数对 - 力扣(LeetCode)
思路分析: ? 由题可知,每个数对有两个数组成且这两个数相等,所以再nums数组中,同一元素的个数一定是偶数; ? 所以用哈希表来记录同一元素的个数,最后判断其是否为偶数就行了 代码如下??
(3)高阶??
思路分析: ??首先这道题读题读懂是非常重要的,通过题我们可以知道,这道题简单的来说就是将数组对应链表,能将数组分成多少段子链表; ? 像这种有映射关系的题我们就可以试着用哈希表来解决: 解题步骤: ? 创建哈希表,首先要知道哈希表的空间,因为数组是链表中整型值的子集,哈希表的空间不能直接是numsSize,要用数组里的值作为哈希表的下标,再用链表中的值找到其下标对应的值,所以哈希表的空间大小是链表的长度
? 所以说第一步是求出链表长度??,然后创建哈希表; ? 之后遍历数组,对于数组中出现的数,我们将它作为哈希表的下标位置,对该位置的值+1; ? 最后一步,遍历链表,判断链表中的整型值对应哈希表的位置是0还是1,0即为断开之处,1即为链接之处。加上计数,这道题就完成了。👌 我们看看代码如何实现??
? End? 查找的讲解到这里就暂时结束了,这是一篇偏新手向的博客(因为我就是新手🤣)?,熟练的运用需要大量的练习,让我们在题海相见吧! ? 本篇的重点当然是哈希表了,虽然这里讲解的很“肤浅”,但足已解决一些简单的哈希表运用题?👌 ? 如果之后本人学有更“先进”的算法知识会立刻写博客分享给大家😈; ? 感谢阅读? Thanks for your reading?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:46:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |