数组元素旋转和交换问题

python 实现交换两个列表元素的位置示例 今天小编就为大家分享一篇python 实现交换两个列表元素的位置示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

今天分享三个关于数组元素旋转和交换的问题:
问题一:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部。

#define _CRT_SECURE_NO_WARNINGS
#define N 10
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void print(int a[],int size)
{
	int start = 0;
	int end = size-1;
	while (start < end)
	{
		while (((a[start]) % 2 != 0))  //从前往后找第一个偶数的位置
		{
			start++;
		}
		while (((a[end]) % 2 == 0))    //从后往前找第一个奇数的位置
		{
			end--;
		} 
		if (start < end)               //只要start索引小于end索引
		{
			a[start] = a[start]^a[end];   //用异或运算符,不创建临时变量完成两个数的交换
			a[end] = a[start]^a[end];
			a[start] = a[start]^a[end];
		}
	}
}

int main()
{
	int a[N];
	for (int i = 0; i < N; i++)
	{
		scanf("%d",&a[i]);
	}
	print(a,N);
	for (int i = 0; i < N; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n"); 
	system("pause");
	return 0;
}

讲解:思路就是从前往后每找到一个偶数和从后往前每找到一个奇数就进行交换。直到start>end就结束。

问题二:
实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void letf_rotate(char* str,int k)
{
	k %= strlen(str);          //k取余字符串长度可以少执行几次while循环,因为旋转字符串长度次会
	while (k--)
	{
		char* cur = str;       //先用一个指针记录字符串首地址
		char tmp = *str;       //创建一个变量存放字符串首元素
		while (*(cur + 1))     //判断当前位置的下一个位置是不是'\0'
		{ 
			*cur = *(cur + 1);  //不是的话则首元素的后面元素依次向前移动
			cur++;
		}
		*cur = tmp;             //最后再把tmp存的首元素赋值给'\0'前的那个位置
	}
}

int main()
{
	int k;
	char str[1024];
	scanf("%s",str);
	scanf("%d",&k);
	letf_rotate(str, k);
	printf("%s\n",str);
	system("pause");
	return 0;
}

讲解:主要就是要注意第二个while循环里的条件,其他都不是很麻烦。

问题三:
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int is_rotate(char* dest,char* src)
{
	strncat(dest,dest,strlen(dest));  //字符串拼接函数
	if(strstr(dest, src)!=NULL)       //字符串判断子串关系函数
		return 1;
	else 
		return 0;
}

int main()
{
	char src[1024];
	char dest[1024];
	scanf("%s",src);
	scanf("%s",dest);
	printf("%d\n",is_rotate(dest,src));
	system("pause");
	return 0;
}

讲解:这个问题其实上面这个方法比较简单,也挺巧妙。是把目标串扩大一倍,利用字符串拼接函数strncat完成,不用strcat是因为在拼接时,首元素会覆盖原目标串’\0’的位置,然后将会一直执行下去就会导致访问越界,而strncat函数在完成规定长度位拼接后会自动在末尾加一个’\0’,然后利用strstr函数判断源串是不是扩大后的目标串的子串,这个很容易想明白字符串最多旋转它的长度位,如果再多就和%它的长度是一样的,所以把目标串扩大一倍就是相当于完成了一个字符串的长度位旋转。

知识推理——TransE(知识表示、知识嵌入) 知识图谱嵌入/表示方法 TransE 阅读详情

相关推荐

【解决方案】使用transformer指定显卡后,模型依然加载到默认第1张显卡上

按理说指定了环境变量为后面几张显卡,模型会自动加载到我们指定的显卡上。可是查看gpu使用情况,发现还是加载在了第一张显卡上,这是为啥呢?

m0_56745306的博客 2441

chatgpt赋能python:Python交换位置:如何快速交换列表中的元素

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

「 虚幻私塾」 3865

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

旋转数组的解题方法——4种(思路+代码)

首先,我们先来看看旋转数组的题目具体是怎样的!

okokxxajj的博客 794

新手必看!用FFmpeg一键合并ts文件的5种方法(含Windows/Mac终端命令)

本文详细介绍了使用FFmpeg合并TS视频文件的5种实用方法,涵盖Windows和Mac终端命令操作。从基础安装到进阶技巧,包括处理音频不同步、批量处理多个视频等场景,帮助用户轻松将m3u8分片视频合并为完整mp4文件,提升视频处理效率。

weixin_29065959的博客 558

用逻辑分析仪实测EM4095:125kHz RFID耳标解码的电压与脉宽玄学

本文通过逻辑分析仪实测EM4095芯片,深入解析125kHz RFID耳标解码中的电压与脉宽关联现象。揭示了供电电压对曼彻斯特编码脉宽的影响规律,并提供了一套可落地的调试方法论,包括信号链路解析、逻辑分析仪配置技巧及系统级稳定性提升方案,帮助开发者解决解码不稳定问题。

weixin_30629653的博客 328

Leetcode算法题:旋转数组问题(全)总结 思路+题解+代码

旋转数组问题 标签:二分查找,翻转数组 题目:189.旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,

Q540670228的博客 6582

TMP112/TMP102温度传感器驱动开发与嵌入式实战

数字温度传感器是嵌入式系统环境感知的核心器件,其通过I²C等标准总线实现高精度、低功耗测温。原理上依赖ΔΣ模数转换与二进制补码数据格式,结合寄存器配置实现模式控制、阈值报警与功耗管理。技术价值体现在±0.5°C级精度、1μA级静态电流及SOT-563超小封装带来的系统集成优势。广泛应用于工业MCU热监控、电池物联网终端、医疗电子温度补偿及汽车ECU板级测温等场景。本文围绕TMP112/TMP102展开,深入解析寄存器协议、硬件接口约束、HAL驱动分层设计、FreeRTOS任务调度及生产级校准方法,覆盖从芯片

weixin_35756690的博客 674

python 一维数组行列互换_零基础Python教程046期 矩阵行列互换算法,二维数组的典型应用...

本节知识视频教程:案例思路:1、行列交换的实质:将索引交换后的值进行交换list1[i][j],list1[j][i]=list1[j][i],list1[i][j]2、每次开始交换的位置必须是对角线for i in range(n): for j in range(i,n):总结强调:1、行列交换的注意点2、注重开始到结果的一个观察源代码分享:# [# [1, 2, 3]...

weixin_42522009的博客 1341

从零构建生产级K8s-v1.35.0集群:基于Containerd与Cilium的kubeadm实战指南

本文详细介绍了从零构建生产级K8s-v1.35.0集群的全过程,涵盖环境准备、Containerd配置、Kubernetes组件安装、集群初始化及Cilium网络部署等关键步骤。通过实战经验分享系统调优技巧和常见问题解决方案,帮助读者快速搭建稳定高效的Kubernetes集群。

weixin_28725553的博客 219

华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 双机位C卷 200分)

这个问题要求模拟打印机的文件调度过程,关键在于正确处理每个打印机队列中的文件优先级和文件进入队列的顺序。优先级处理:每个文件有一个 1 到 10 的优先级,数字越大优先级越高,打印机应首先处理优先级最高的文件。在打印机 1 的队列中插入了 3 个文件,分别有不同的优先级,其中编号 3 的文件优先级最高,先被取出。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10 不同的 优先级,其中数字越大优先级越高。在打印机 2 的队列中插入了 1 个文件,优先级为 1,因此它被首先取出。

学Java,找哪吒 1079

Python学习numpy(一维数组)保姆级别教学

Numpy软件库提供了对于数组进行高速处理的ndarray类。生成ndarray类的方法之一是使用Numpy的np.array()函数,使用np.array(列表)语句,通过传入的列表创建ndarray实例。同时也可以使用np.arrange()函数 ###实例一:创建一维ndarray类 import numpy as np eg1=np.array([1,2,3]) #输出一维数组[1,2,3] eg2=np.arange(4) #输出0到3的一维数组 eg11=[1,2,3] #创建列表e

ldy__cwx的博客 6266

基于STM32的智能手环心率血氧体温监测系统(完整设计)

本文设计了一款基于STM32单片机的多功能智能手环系统,集成心率、血氧、体温实时监测功能,并支持运动数据管理与健康预警。系统采用MAX30102传感器实现心率血氧监测,DS18B20检测体温,ADXL345进行步数统计,通过OLED屏幕显示数据。研究通过低功耗硬件选型与模块化软件架构设计,实现了多参数同步采集、阈值预警及蓝牙数据传输功能。测试结果表明,系统在健康监测精度、续航能力及用户交互体验上均达到预期目标,为个人健康管理提供了实用解决方案。

3254968421的博客 701

189. 旋转数组

题目描述: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-100,...

zhf的博客 115

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

leetcode中的n*n数组旋转问题

旋转的话分顺时针旋转和逆时针旋转顺时针旋转:首先以行为单位进行各行位置的交换。各个行的位置交换后,将i,j位置的元素进行交换。举个例子 * first reverse up to down, then swap the symmetry * 1 2 3 7 8 9 7 4 1 * 4 5 6 =&gt; 4 5 6 =&gt; 8 5 2 * 7 8 9 1 2...

shantf93的博客 421

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode 189. 旋转数组

189. 旋转数组 难度:简单 题库地址:leetcode-cn.com/problems/ro… 1. 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3...

weixin_34341229的博客 298

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数组——旋转数组

题目:给一个数组,和长度,还有一个k值,将数组后移k个位置。注意:超过最后的位置的数组,会循环到第一个位置。 例如:arr[7] = {1,2,3,4,5,6,7}; len = 7; k = 3; 旋转过后数组为:arr[7] = {5,6,7,1,2,3,4}; 首先k = k%len;k和k = k%len效果一样。比如上面例子,移7位和移0位一样,优化一下,k = %len。 本篇博客记录以下几种方法: 1.将最后一个元素拿出来保存到tmp中,其他元素都后移k个,将tmp赋值给第一个元素。重复操作k

yi_chengyu的博客 366

数组题目: 665. 非递减数列、453. 最小移动次数使数组元素相等、283. 移动零、189. 旋转数组、396. 旋转函数

0,那我们就让nums[left]和nums[right]进行交换,再把Left增加。如果按照2的情况,当nums[i - 2] < nums[i],那我们就优先考虑把。如果按照1的情况,nums[i - 2] > nums[i],对于这个nums,由于2的出现导致非递减,更改的情况就是要么。对于这个nums,由于2的出现导致非递减,更改的情况就是要么。nums[i - 1]改成nums[i],nums[i]不动。对于这个nums,由于2的出现导致非递减,更改的情况就是。

Accelerated的博客 647

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

题目来源:https://leetcode-cn.com最直观的写法:旋转一步就是将最后一个数置换到最前面(一个一个交换),然后在外部添加一个循环(步数)。class Solution {    public void rotate(int[] nums, int k) {        int temp=0;        int length=nums.length;        if(k%...

lu_wei_keke的博客 6614

90°旋转数组

旋转数组

weixin_62549963的博客 428

旋转数组

题目来源:力扣 法一: class Solution { public void rotate(int[] nums, int k) { for(int times = 0; times < k; times++){ int lastNumCopy = nums[nums.length - 1]; for(int i =...

Snakehj的博客 174

旋转数组-环状替换思路

在循环过程中,从位置0开始进行移动,位置0的元素会放在x=(0 + k) % n的位置上,为了不再次开辟空间,我们在数组上直接进行元素的交换,这样完成了位置0的元素值和位置x的元素值,然后在x位置上进行上述的循环过程,即x1=(x + k) % n,交换x位置和x1位置的元素值,不断进行循环,直到回到初始位置0.确定结束循环的条件比较好理解,当初始位置的索引不等于循环过程中的索引就一直进行本轮的循环,换一句话说当循环过程中的索引等与本轮循环的初始位置的索引时,就停止本轮的循环。以下代码来自力扣方法二。

z_c_kaifa的博客 356

旋转二维数组----Rotate Image

You are given annxn2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Note: You have to rotate the imagein-place, which means you have to modify the input 2D matrix d...

大魔王 669

leetcode189旋转数组

给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例2: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释: 向右旋转 1 步: [99,-1,-100,3]...

曹健的博客 218

LeetCode 旋转数组通解

前言 本人算法比较薄弱,最近在找工作的时候也常常被算法题劝退了,寻思上一下LeetCode学习一下。 遇到了第三题的旋转数组挺有意思。 不说了,直接看题: 看上就是数组的顺序调转,一开始楼主也不知道怎么做,就上网偷偷看了一眼答案,寻思我也看不懂什么翻转又什么数值变换的。 基础比较差的我看得一头雾水,寻思我自己写一个吧。 所以我用了最原始的方法: 定义两个信号量temp和temp1; 先分析这...

kabutozect的博客 156

2022.03.17 - NC068.BM97 旋转数组

文章目录1. 题目2. 思路(1) 双指针法3. 代码 1. 题目 2. 思路 (1) 双指针法 首先对整个数组进行旋转,然后分别对前m个元素的子数组和后n-m个元素的子数组进行旋转即可。 3. 代码 public class Test { public static void main(String[] args) { } } class Solution { /** * 旋转数组 * * @param n int整型 数组长度 *

阿财继续努力 473
上一篇: C语言异或操作符的经典题
下一篇: 模拟实现内存函数(memcpy,memmove)
Python_programer
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值