【C语言】如何“查找”到你想要数字(二分查找,哈希表)——LeetCode刷题分享

本文从顺序表查找开始,逐步深入到二分查找、插值查找等有序表查找方法,最终详细解析散列表(哈希表)的原理及其应用场景。通过多个实例加深理解,适合初学者入门掌握。

目录

一、 介绍

 二、顺序表查找

2.1 认识与基础

2.2 优化改进

2.3 例题:移除元素 

三、有序表查找

3.1 二分查找

3.2 *插值查找

四、散列表查找(哈希表)

4.1 初步了解

4.2 哈希表的运用

(1)初阶

(2)中阶

(3)高阶 

End


一、 介绍

相信大家再日常学习生活中遇到难题常常会上网输入关键字,查找到你想要的答案;那么在C语言中如何查找到你想要的数据呢?初学C语言,老师肯定会让你试试在数组中找到指定的一个数,将他改成另一值;查找的方法多种多样,运用场景也千变万化,接下来我们一起来学习基础且实用的查找方法

 二、顺序表查找

2.1 认识与基础

若给定一个数组,在数组中查找某一元素,并返回其下标。就像在衣柜里找衣服一样,按顺序一件一件的查找到你想要的就行。我们看看代码是如何实现的⬇️

int Sequential_Sreach(int* a, int key, int n)  //a为传入的数组;key为需要查找的元素;
{                                              //n为数组元素个数;
	for (int i = 0; i < n; i++)
	{
		if (a[i] == key)
			return i;
	}
	return 0;         //若没有找到,则返回0;
}

2.2 优化改进

上述方法,每进入一次循环都要判断 i 是否越界,接下来介绍一个改进后的代码:若要查找数组下标从1到n中的某个元素,设置一个哨兵,每次与该哨兵比较,一起通过代码来理解⬇️

int Sequential_Sreach(int* a, int key, int n)
{
	a[0] = key;
	int i = n;
	while (a[i] != key)
	{
		i--;
	}
	return i;              
}

与之前不一样的是这里是找下标1到n中的元素,将a[0]赋值需要查找的数,从右往左查找,进入while循环,减去下标 i 直到a[ i ] ==key;

若当数组中没有查到到,此时i = 0,跳出while循环,return 0;

2.3 例题:移除元素 

 LeetCode  27.移除元素https://leetcode.cn/problems/remove-element/

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

 审题:最开始做这道题的时候可能会轻敌,移除元素不就只需要将查找到的元素删除吗,但这是个数组,并且题目要求返回删除后的长度,所以每次删除一个元素,需要将其后面的所有元素往前移一位,像这样你可以很简单的将其暴力地解出,但是效率会很低;这里我们介绍一个做题时常用且巧妙地方法:双指针(左右指针)

解题:

(1)定义 left , right 指向同一数组,需要查找的元素  val

(2)※for循环中,right遍历整个数组,若right指向的元素等于 val,则left保持原来位置(该位置值为val,待覆值),right指向下一位置;

       当right指向的元素不为val时,将此时的值赋给left指向的值,就将原本为val的值覆盖了

(3)※  left为数组下标,最后left指向的是left+1个数,但移除后的的个数为left; 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dusong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值