刷题笔记(跑路人笔记)

这篇具有很好参考价值的文章主要介绍了刷题笔记(跑路人笔记)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

刷题笔记第一道题跟后面没啥关系
但是后两道关系比较明显
最后一道题看不懂的朋友请多看看倒数第二道题

轮转数组😎

连接

一个规律=-=而非思想,叫

三趟逆置法

想要旋转数组元素的前K个只需要

先逆置N-K项
再逆置K项
再整体逆置

首先说一下旋转和逆置的区别

以数组: 1,2,3,4,5,6,7,8为例

旋转3次可以理解就成为4,5,6,7,8,1,2,3

而逆置前三个元素就是 3,2,1,4,5,6,7,8

逆置前四个元素就是4,3,2,1,5,6,7,8

可以理解为逆置就是将要逆置的元素首位交换位置

而旋转就是将要旋转位数的元素前移(右旋转)或后移(左旋转)其他元素向后移动.

所以逆置要比旋转轻松很多

我们使用的三趟逆置法就是一个规律----如果感觉必要的话可以背一下=-=.

void reverse(int* nums,int left,int right)
{
	while (left < right)
	{
		int ret = nums[left];
		nums[left] = nums[right];
		nums[right] = ret;
		left++;
		right--;
	}
}
void rotate(int* nums, int numsSize, int k)
{
	k %= numsSize;
	reverse(nums, 0, numsSize - k - 1);
	reverse(nums, numsSize - k , numsSize - 1);
	reverse(nums, 0, numsSize - 1);
}

说这么多还是代码见真章

其中

void reverse(int* nums,int left,int right);

这个函数是逆置的,你只需将要逆置的数组和左右位置下标传给他就好没啥讲的.

void rotate(int* nums, int numsSize, int k);

该函数是我们要实现的接口函数我们只需注意k的取值因为当k大于numsSize时多余的次数只是在循环,所以我们可以使用k%=numsSize来避免越界和效率的浪费.

寻找奇数😎

1、现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。

输入描述:第一行:一个整数n,表示序列的长度。第二行:n个正整数ai,两个数中间以空格隔开。

输出描述:一个数,即在序列中唯一出现奇数次的数值。

OJ链接【牛客网题号:KS33 寻找奇数】【难度:简单】

答案:

int main()
{
	int n = 0;
	scanf("%d", &n);
	int k = 0;
	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &k);
		ans ^= k;
	}
    printf("%d",ans);
	return 0;
}

思路: 按位异或操作符的应用

下面先介绍一下原理

刷题笔记技术文章,数据结构刷题,动态规划,c语言,算法

从上图可以看出

① 0^k(随便一个数) = k;
^操作的两个数在二进制中相同就为0相异就为1
② k^k = 0;(甚至可以隔着几个数依旧成立)如上图的k^j^k = j

知道这两个原理就可以做出本题了

我们要从数值里找到一个出现数次为奇数的值.就原理②可以看到出现偶数次的数值通过按位异或就变成0 出现次数为奇数的数值就会和答案里的ans(及0)进行按位异或操作得到奇数数值最后打印即可

我们再来看一下答案就能更清楚的明白了.

int main()
{
	int n = 0;
	scanf("%d", &n);
	int k = 0;
	int ans = 0;//因为0按位异或任何数都是那个数值
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &k);
		ans ^= k;//使用^= 时要注意ans一定要初始化为0才能将k保存下来用来下一次的操作
	}
    printf("%d",ans);//最后只有出现为奇数的值被保留了下来
	return 0;
}

数组中数字出现的次数😎

连接
上一道题我们通过^操作符完成的,这道题也用^不过会稍微更有难度一些.
首先代码奉上.解析在代码下.

int* singleNumbers(int* nums, int numsSize, int* returnSize)
{
	int i = 0;
	int x = 0;
	for (i = 0; i < numsSize; i++)
	{
		x ^= nums[i];
	}
	int num = 0;
	for (i = 0; i < 32; i++)
	{
		if (((x >> i) & 1) == 1)
		{
			num = i;
			break;
		}
	}
	int m = 0;
	int n = 0;
	for (i = 0; i < numsSize; i++)
	{
		if (((nums[i] >> num) & 1) == 1)
		{
			m ^= nums[i];
		}
		else
		{
			n ^= nums[i];
		}
	
	}
    	int* ret = (int*)malloc(sizeof(int) * 2);
		*returnSize = 2;
		ret[0] = m;
		ret[1] = n;
		return ret;
}

这道题也有别名叫寻找单身狗,是在数组中寻找两个单身的数组,因为是两个所以我们不能想之前那样直接使用^我们需要先将所有数值与x进行^操作这是为了得到两个单次出现数组的^值比如{1,1,3,3,2,2,5,6,7,7,6,9}单次出现的数字为5,9
刷题笔记技术文章,数据结构刷题,动态规划,c语言,算法
这样我们的x值其实就相当于5^9的值在得到这个之后我们需要进行分组,而分组我们就需要将5和9分开,有什么条件可以让5和9分开呢?
这里我们就要用到

^在二进制位相同为0相异为1

所以我们只需要找到x在那一二进制位为1就好.
刷题笔记技术文章,数据结构刷题,动态规划,c语言,算法
这一步就是为了得到二进制位1的位置
得到后我们就可以通过这个位数的1将两个单身狗分开分别进行^操作得到这两个单身狗了.

结尾

求三连,求点赞,我想要机器人😭文章来源地址https://www.toymoban.com/news/detail-788495.html

到了这里,关于刷题笔记(跑路人笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【全方位解析】如何写好技术文章

    前言 为何而写 技术成长 :相对于庞大的计算机领域的知识体系,人的记忆还是太有限了,而且随着年龄的增大,记忆同样也会逐渐衰退,正如俗话所说“好记性不如烂笔头”。并且在分享博客的过程中,我们也可以和大神交流,进而发现自己的认知错误,纠正知识体系。最

    2024年02月16日
    浏览(41)
  • SAP ABAP技术文章合集_微信公众号:ABAP猿

    序号 文章标题 01 ABAP OOALV-基本显示 02 ABAP OOALV-排序、过滤 03 ABAP OOALV-合计、小计 04 ABAP OOALV-选择模式、触发事件 05 ABAP OOALV-隐藏列、修改列标题、添加图标列、调整列位置 06 ABAP OOALV-固定列、鼠标悬停文本 07 ABAP OOALV-颜色(列、行、单元格) 08 ABAP OOALV-样式(列、行、单元格

    2024年02月03日
    浏览(39)
  • 【ARM Cache 系列文章 8 -- ARM DynamIQ 技术介绍

    请阅读 【ARM Cache 系列文章专栏导读】 2017年3月21日下午,ARM在北京金隅喜来登酒店召开发布会,正式发布了全新的有针对人工智能及机器学习进行优化的DynamIQ技术,ARM 称 DynamIQ将是下一代计算革命的开始,将重新定义计算,可以覆盖覆盖从端到云的安全、通用平台。将被广

    2024年02月13日
    浏览(36)
  • 【ARM Cache 系列文章 9 -- ARM big.LITTLE技术】

    转自 :https://zhuanlan.zhihu.com/p/630981648 如有侵权,请联系删除 为满足在移动设备应用领域中的节能需求,ARM于2011年首次提出了big.LITTLE技术。big.LITTLE技术是一种使用两种不同ARM处理器的处理架构技术,即big处理器和LITTLE处理器,big处理器用于提供高性能,LITTLE处理器用于追求

    2024年02月13日
    浏览(33)
  • 云贝教育 |【技术文章】Oracle 19c 单实例dg+rman+copy方案

    软件名称 版本 vmware v15 操作系统 oracle linux 8.8 数据库 19.3.0.0.0 secureCRT 9 类型 IP 主机名 db_name db_unique_name instance_name ORACLE_SID 主库 192.168.2.115 db1 ORCLCDB ORCLCDB1 ORCLCDB1 ORCLCDB1 备库 192.168.254.38 db2 ORCLCDB ORCLCDB2 ORCLCDB2 ORCLCDB1 说明:以下配置无特殊说明,均在CDB下,用SYS用户操作。 1)

    2024年01月23日
    浏览(33)
  • AI写作技术鉴别攻略:8招轻松识别文章是否为AI所写

    诚然,AI写作技术不断进步,产出海量文章,那么我们该怎样辨别一篇文章是否为AI所写呢?接下来我会就此问题分享几招小技巧,教您轻松鉴别AI文章哦。 1.观察语言风格 审阅AI生成的文本时,请留意其是否能够自然地富有情感和生动形象的描绘场景或人物。同时,也欢迎关

    2024年04月13日
    浏览(25)
  • OSPF技术连载16:DR和BDR选举机制,一篇文章搞定!

    你好,这里是网络技术联盟站。 在计算机网络中,开放最短路径优先(Open Shortest Path First,OSPF)是一种广泛使用的内部网关协议(Interior Gateway Protocol,IGP),用于在大型网络中实现路由选择。在OSPF网络中,当一个OSPF区域内有多个路由器时,为了减少链路状态数据库(Link

    2024年02月07日
    浏览(33)
  • 【人工智能】谷歌 Bard 写文章能力测评:人类技术革命的历史—— GPT-4 危险了,论技术看来还是Google牛逼啊

    目录 人类技术革命的历史 第一次技术革命:新石器时代革命 第二次技术革命:工业革命

    2024年02月09日
    浏览(34)
  • [TI TDA4 J721E] TDA4平台 相关技术文章 汇总

            首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习。 资历较浅,水平有限,如遇错误,请大家多指正! 保持开源精神,共同分享、进步! 博主WX :  AIR_12   我会拉你入群。 链接: TDA4 相关专栏     

    2024年02月04日
    浏览(36)
  • 使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

    最近AI技术的发展非常迅猛,尤其是和GPT相关的技术,备受瞩目。近日,Autogpt技术也引起了广泛关注,据说非常厉害。 那么什么是Autogpt呢?Autogpt是一种先进技术,可以高精度和高效率地自动执行许多任务。它利用了 GPT-4 强大的自然语言处理功能。 在本文中,我们将尝试使

    2023年04月21日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包