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

如何只对整型数组中的奇数进行排序,而将偶数保留在其原始位置?

要对整型数组中的奇数进行排序,而将偶数保留在其原始位置,可以使用双指针法进行操作。以下是具体步骤:

  1. 定义两个指针,一个指向数组的起始位置(称为left),另一个指向数组的末尾位置(称为right)。
  2. 循环遍历数组,直到left指针超过或等于right指针。
  3. 在循环中,判断当前left指针所指向的元素是否为奇数。如果是奇数,则left指针向右移动一位。
  4. 在循环中,判断当前right指针所指向的元素是否为偶数。如果是偶数,则right指针向左移动一位。
  5. 在循环中,如果left指针所指向的元素为偶数,right指针所指向的元素为奇数,则交换这两个元素的位置。
  6. 循环结束后,所有奇数都会被移动到数组的左侧,而偶数则保留在其原始位置。

以下是一个示例代码(使用Python语言):

代码语言:txt
复制
def sort_odd_numbers(arr):
    left = 0
    right = len(arr) - 1

    while left < right:
        if arr[left] % 2 == 0:  # 当前left指针所指向的元素为偶数
            if arr[right] % 2 == 1:  # 当前right指针所指向的元素为奇数
                arr[left], arr[right] = arr[right], arr[left]  # 交换两个元素的位置
                left += 1
            right -= 1
        else:
            left += 1

    return arr

这个算法的时间复杂度为O(n),其中n是数组的长度。它只需要遍历一次数组,并且只进行了有限次的元素交换操作,因此效率较高。

推荐的腾讯云相关产品:无

请注意,以上答案仅供参考,具体实现方式可能因编程语言和实际需求而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《剑指offer》专题—算法训练 day01

大家做这种题目一定要看好,调换奇数偶数时候 ,有没有说明 相对位置是否发生改变.   当然了,这道题原题是不需要保证奇偶位置不变,先给大家说一下 相对位置发生改变题目....在一个 left < right 一个循环条件下, 左指针从数组左边开始遍历,遇到偶数就停止,遇到奇数就跳过 右指针从数组右边开始遍历,遇到奇数就停止,遇到偶数就跳过....这两边遍历完之后我们会得到 左边遍历得到偶数下标 ,右边遍历得到奇数下标,此时交换这两个下标的数字 重复以上操作,我们最后得到了一个 奇数在前 偶数在后 (相对位置发生变化) 一个数组序列...思路 从左向右,每次遇到,都是最前面的奇数,一定将来要被放在k下标处, 现将当前奇数保存起来 将该奇数之前内容(偶数序列),整体向后移动一个位置....如果剩下两个,那么这两个也是一样,就是结果),在其基础上把最后剩下一个数字或者两个回到原来数组,将数组遍历一遍统计一下数字出现次数进行最终判断。

32420

华为招聘机试整理14:数组奇数偶数排序「建议收藏」

华为招聘机试整理14:数组奇数偶数排序 题目:数组奇数偶数排序 对一个数组。...将数组偶数从大到小排序奇数从小到大排序,奇数偶数交叉着放且输出数组第一位放奇数奇数偶数不等长,则把剩下直接放到数组。...题目分析: 本题主要就是考查整型数组之间排序 算法思路: ①先循环推断每一个数奇数偶数。...分别放入奇数数组偶数数组 ②用sort将奇数数组偶数数组排序 ③比較奇数数组偶数数组个数大小关系 ④依据题目要求组织存放数据 ============================...这里特别easy犯错,由于我们m每次循环时候都加了1 ③不要忘记a[n+1] = ‘\0’切记不能写成a[n] = ‘\0’ ③对于整型数组主函数时候。

25910
  • 【Day28】力扣算法(超详细思路+注释)

    第一个节点索引被认为是 奇数 , 第二个节点索引为 偶数 ,以此类推。 请注意,偶数组奇数组内部相对顺序应该与输入时保持一致。...0 <= n <= 104 -106 <= Node.val <= 106 解题思路: 第一个节点是奇数,第二个节点是偶数,往后节点也是 奇数-偶数-奇数--位置顺序。...当我们遍历完原始链表,也就完成了奇数链表与偶数链表节点连接,这时候将奇数链表末尾节点指向偶数链表头节点即可。...我是用排序方法是归并排序,我们知道,归并排序首先需要获得排序元素中间元素位置。...我们不断对相邻两个节点进行归并操作,将归并好节点按照顺序放入准备好新链表,最后返回新链表头节点即可! 最主要还是理解归并排序步骤、模板。

    43130

    每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面

    n 整数数组,实现一个函数来调整该数组数字顺序,使得所有的奇数位于数组前面部分,所有的偶数位于数组后面部分,并保证奇数奇数偶数偶数之间相对位置不变。...,如果不考虑奇数奇数偶数偶数相对位置,那么我们有一种双指针解法来求解,类似于快排,维护两个指针,第一个指针指向数组第一个数字,第二个指针指向数组最后一个数字。...本题解法:对数组进行遍历,设置两个指针even和odd,even指向当前第一个偶数,odd从这个偶数之后开始查找,找到第一个奇数,此时为了相对位置不变,不能直接交换even和odd,而是将从even到odd...(二) 难度:简单 描述 输入一个长度为 n 整数数组数组里面可能含有相同元素,实现一个函数来调整该数组数字顺序,使得所有的奇数位于数组前面部分,所有的偶数位于数组后面部分,对奇数奇数偶数偶数之间相对位置不做要求...数据范围 数据范围:0≤n≤50000,数组每个数值 0≤val≤10000 要求:时间复杂度 O(n),空间复杂度 O(1) 举例 解题思路 这道题不需要要求相对位置不变,因此我们可以采用位置交换方法

    16550

    力扣5-最长回文子串

    示例 2:输入:s = "cbbd"输出:"bb"提示:1 <= s.length <= 1000s 仅由数字和英文字母组成解题图片思路描述回文子串即对称位置值相等,判断是否为回文子串,需要注意两种情况字串长度为奇数字串长度为偶数先分析字串长度为奇数情况奇数时相对容易...1,MAX=3如此重复,最后LENTH=1,MAX=3;字串长度为偶数时步骤与奇数时类似,难在如何高效地同时处理奇偶两种情况。...还应注意是,最后返回值类型要求是字符串:对于字符串长度为奇数这种情况,容易理解:(LEFT+RIGHT)/2=CENTER,RIGHT-LEFT-1=MAX根据这两个方程即可确定截取原字符串位置对于字符串长度为偶数这种情况...} } return result; }};运行效果执行用时: 4 ms内存消耗: 9.1 MB图片总结这个题一共有如下几个重点:子串长度分别为奇数偶数情况返回值是字符串而非整型及时跳出对于第一点...,举例假设方法寻找规律第二点,每轮循环求得最大值后,保留当前最长字串第三点,模拟一下

    33300

    力扣5-最长回文子串

    如果字符串反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意答案。...,需要注意两种情况 字串长度为奇数 字串长度为偶数 先分析字串长度为奇数情况 奇数时相对容易,由于字符串长度为一时一定回文,因此,过程如下: 创建一个循环,控制CENTER从一端移向另一端 使用两个指针...=1,MAX=3; 字串长度为偶数时 步骤与奇数时类似,难在如何高效地同时处理奇偶两种情况。...还应注意是,最后返回值类型要求是字符串: 对于字符串长度为奇数这种情况,容易理解:(LEFT+RIGHT)/2=CENTER,RIGHT-LEFT-1=MAX根据这两个方程即可确定截取原字符串位置...返回值是字符串而非整型 及时跳出 对于第一点,举例假设方法寻找规律 第二点,每轮循环求得最大值后,保留当前最长字串 第三点,模拟一下

    33440

    剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

    一、题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组数字顺序,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分。   ...2.2 高效解法   这里可以参考快速排序思想,快速排序基本思想是:通过一趟排序将待排记录分割成独立两部分,其中一部分记录关键字均比另一部分记录关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序目的...image.png   因此,我们可以借鉴快速排序思想,通过设置两个指针来进行交换操作,从而减少移动次数,提高效率: Step1.第一个指针初始化时指向数组第一个数字,它只向后移动; Step2...②如何调用 // 判断奇数还是偶数 ReorderHelper.ReorderOddEven(numbers, new Predicate((num) => num % 2 =...作者:周旭龙 出处:http://edisonchou.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

    43360

    【趣学C语言和数据结构100例】11-15

    12.有一个已排好序数组,要求输入一个数后,按原来排序规律将它插入数组。13.将一个数组值按逆序重新存放。例如,原来顺序为 8, 6, 5, 4, 1。要求改为 1, 4, 5, 6, 8。...对于 nxn 整型矩阵,先判断n为奇数还是偶数:n为奇数,对角线元素之和为正对角线+副对角线-a[n/2][n/2]n为偶数,对角线元素之和为正对角线+副对角线12.有序数组进行插入for循环遍历,从后往前...杨辉三角杨辉三角可知第一列和正对角线都为1(即i= =j || i= =0),对于普通位置array[i][j]=array[i-1][j]+array[i-1][j-1];(该位置正上方数+该位置正上方数左边...d\n", sum1 + sum2);// n为偶数,则直接加 }// 12.有一个已排好序数组,要求输入一个数后,按原来排序规律将它插人数组。...= num; for (i = 0; i < 6; i++) { printf("%d ", array[i]); } printf("\n");// 13.将一个数组值按逆序重新存放

    6310

    深入了解Java数组操作及常用算法题

    在Java编程数组是一种重要数据结构,可以存储多个相同类型元素。本文将介绍如何使用Java数组进行常见操作,并探索其中一些常用算法。...题目1:返回数组所有偶数 首先,我们定义一个计数器count,用于统计数组偶数个数。通过遍历数组,对每个元素进行取模操作,判断是否为偶数。...如果是偶数,则将其添加到新数组arr_new,并同时增加计数器count值。最后,我们得到了一个新数组arr_new,其中包含原始数组所有偶数。...通过遍历数组进行取模操作,判断是否为奇数。如果是奇数,则将其添加到新数组arr_new2,并同时增加计数器count2值。...通过使用冒泡排序算法或其他排序算法,可以实现数组倒序排列。在给定代码,使用了冒泡排序算法来完成这个任务。最终,我们得到了一个新数组arr_new10,其中包含了原始数组倒序排列后结果。

    20110

    前端学数据结构与算法(十一):看似简单又让人抓狂二分查找算法

    真正二分查找题目细节更讲究,来感受下二分查找为什么让人抓狂吧。 35 - 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。...如果目标值不存在于数组,返回它将会被按顺序插入位置。 你可以假设数组无重复元素。...] 2.1 - 中间元素与前一个元素相同时,唯一不同那个元素在左侧部分,因为既然都是偶数,哪边有相同元素,哪边就是奇数数组了,下一次查找截止位置为mid - 2。...res[map.get(intervals[i])] = minIndex; // intervals[i]是排序后所在位置 // 而map.get(intervals[i])找到又是它原始下标位置...// minIndex对应是其原始最小右区间 } return res; // 返回集合 }; 因为二分查找只能作用于有序数组,所以数组无序时,我们可以先对其进行排序

    46230

    按奇偶排序数组II

    按奇偶排序数组II 给定一个非负整数数组A,A中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数。...1 === 1) return odd[~~(i/2)]; else return even[i/2]; }) return target; }; 思路 本题是分配奇偶数问题...,名义上是排序,其实将奇偶数分配即可,首先遍历数组,将数组奇数偶数分别取出并置入数组,之后再次遍历数组根据下标分别从奇数数组偶数数组置入目标数组即可,使用双指针原地修改数组也可完成本题。...首先分别定义奇数数组偶数数组,之后进行遍历,如果这个数是奇数,就将其加入奇数数组,同样如果是偶数就加入偶数数组,之后进行map遍历,如果下标是奇数就将奇数数组相应位置值返回,否则就返回偶数数组相应位置值...,在这里判断奇偶性是通过位运算实现,另外向下取整也是通过位运算隐式转换为整数,进行map遍历会生成新数组,将新数组返回即可。

    1.2K20

    漫画算法:找出缺失整数

    解法二: 先把数组元素进行排序,然后遍历数组,要么有其中两个相邻元素之间差不是1,要么缺失整数是1或100。...假设数组长度是N,如果用时间复杂度为O(N*LogN)排序算法进行排序,那么该解法时间复杂度是O(N*LogN),空间复杂度是O(1)。...题目扩展:一个无序数组里有若干个正整数,范围从1到100,其中99个整数都出现了偶数次,只有一个整数出现了奇数次(比如1,1,2,2,3,3,4,5,5),如何找到这个出现奇数整数?...题目第二次扩展:一个无序数组里有若干个正整数,范围从1到100,其中98个整数都出现了偶数次,只有两个整数出现了奇数次(比如1,1,2,2,3,4,5,5),如何找到这个出现奇数整数?...这样一来就简单了,我们问题又回归到了上一题情况,按照原先异或解法,从每一部分找出唯一奇数次整数即可。 假设数组长度是N,那么该解法时间复杂度是O(N)。

    28720

    C语言中如何获取数组中位数

    C语言中如何获取数组中位数在C语言编程,获取数组中位数是一项常见而重要任务。中位数是一个数组一个特殊值,它将该数组分为两个等长部分。...当数组长度为奇数时,中位数就是位于数组中间位置元素;当数组长度为偶数时,中位数是中间两个元素平均值。7C语言中如何获取数组中位数为了实现获取数组中位数,我们可以使用以下步骤:1....对数组进行排序:首先,我们需要对给定数组进行排序,以便能够准确地找到中位数。在C语言中,可以使用快速排序、归并排序或插入排序等算法对数组进行排序。2....- 当数组长度为偶数时,中位数位置为 (数组长度 / 2) 和 (数组长度 / 2 + 1)。3. 获取中位数值:最后,根据确定中位数位置,我们可以从排序数组获取中位数值。...如果数组长度为奇数,则中位数值就是位于中位数位置元素;如果数组长度为偶数,则中位数值为中间两个元素平均值。

    67930

    Go 常见算法面试题篇(三):高效调整数组数值顺序

    题目 今天来看一个考察程序员基本功数组面试题,看起来仍然很简单,不过通过这个题目的不同解法,可以快速检验你是初级程序员还是资深程序员,一起来看下吧: 输入一个整数数组,实现一个函数来调整该数组数字顺序...,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分。...,分别用于存储奇数偶数,然后遍历待排序数组切片,根据是否可以被 2 整除将切片数据分发到偶数奇数切片,最后将偶数切片数据追加到奇数切片之后作为新切片返回。...,如果换一下排序条件,变成按照是否可以被3整除,或者按照正负数进行排序,则需要重写整个排序方法实现代码。...3 == 0 } 性能对比 从扩展性上看,显然第二种解法比第一种好很多,除此之外,我们在第二种解法还通过指针移动和位运算方式优化了程序性能,具体对性能影响如何,可以编写基准测试来验证: package

    44610

    2022-04-22:给你两个正整数数组 nums 和 target ,两个数组长度相等。

    如果两个数组每个元素出现频率相等,我们称两个数组是 相似 。 请你返回将 nums 变得与 target 相似的最少操作次数。 测试数据保证 nums 一定能变得与 target 相似。...答案2022-04-22: 给定两个长度相等整型数组 nums 和 target,要求将 nums 变为与 target 相似,并返回最少需要操作次数。...对 nums 和 target 进行偶数值分离,将奇数值从偶数值中分离出来。这一步可以使用 split() 函数实现。 对 nums 和 target 分别对奇数值和偶数进行排序。...这里可以使用 sort.Ints() 函数进行排序。 逐一比较 nums 和 target 对应元素,计算它们之间差值绝对值之和。这一步可以使用 abs() 函数和循环实现。...时间复杂度: * 对于奇偶数值分离操作,需要遍历一遍数组,时间复杂度为 O(n); * 对于排序操作和差值计算操作,需要遍历两次长度为 n 数组,时间复杂度为 O(n log n); * 因此,总时间复杂度为

    15940

    2022-04-22:给你两个正整数数组 nums 和 target ,两个数组长度相等。 在一次操作,你可以选择两个 不同 下标 i 和 j , 其中 0

    答案2022-04-22:给定两个长度相等整型数组 nums 和 target,要求将 nums 变为与 target 相似,并返回最少需要操作次数。...对 nums 和 target 进行偶数值分离,将奇数值从偶数值中分离出来。这一步可以使用 split() 函数实现。对 nums 和 target 分别对奇数值和偶数进行排序。...这里可以使用 sort.Ints() 函数进行排序。逐一比较 nums 和 target 对应元素,计算它们之间差值绝对值之和。这一步可以使用 abs() 函数和循环实现。...将差值绝对值之和除以 4,即得到最少操作次数。整个过程就是这样。具体来说,第二步和第三步是为了方便后面的比较和计算而进行预处理。第四步是最重要一步,需要仔细计算每一个位置差值,并将它们相加。...时间复杂度:对于奇偶数值分离操作,需要遍历一遍数组,时间复杂度为 $O(n)$;对于排序操作和差值计算操作,需要遍历两次长度为 $n$ 数组,时间复杂度为 $O(n \log n)$;因此,总时间复杂度为

    1.1K30

    链表问题(二)-LeetCode 147、876、234、817、92(链表中点,快慢指针)

    1 编程题 【LeetCode #147】对链表进行插入排序 对链表进行插入排序。...在进行插入时候,首先使用cur指针标记head->next节点,并改变head->next指向。从而将待插入节点分离!接着就是普通插入操作了!...fast->next->next : nullptr; } // 这里中点偶数时为第二个节点,奇数时为中点下一个节点! while(slow !...同时给定列表 G,该列表是上述链表整型一个子集。 返回列表 G 组件个数,这里对组件定义为:链表中一段最长连续结点值(该值必须在列表 G )构成集合。...他意思就是,如果连续相邻链表节点值都在G这个数组,那么这为一个组件,如果不在,则忽略!最终答案是G中有多少个组件。 比如0->1->3->2, 而G = [1,3,0] 则答案为 1。

    52720

    用javascript分类刷leetcode19.数组(图文视频讲解)5

    按奇偶排序数组 (easy)给你一个整数数组 nums,将 nums 所有偶数元素移动到数组前面,后跟所有奇数元素。返回满足此条件 任一数组 作为答案。...示例 2:输入:nums = 0输出:0提示:1 <= nums.length <= 50000 <= numsi <= 5000方法1.排序思路:排序比较,偶数在前,奇数在后复杂度:时间复杂度O(nlogn...按奇偶排序数组 II (easy)给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。...对数组进行排序,以便当 numsi 为奇数时,i 也是 奇数 ;当 numsi 为偶数时, i 也是 偶数 。你可以返回 任何满足上述条件数组作为答案 。...方法1.双指针图片思路:循环偶数位置 如果遇到了奇数,然后循环奇数位置 如果遇到了第一个偶数,就交位复杂度:时间复杂度O(n),空间复杂度O(1)js:const swap = (nums, i, j)

    51240

    调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组数字顺序,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分。...: 1 3 4 5 6 2 ↑ 移动后 继续扫描当前位置,发现3为奇数,继续,发现4为偶数,将从3之后位置数开始,到倒数第二个位置,所有数往前移动一个位置,并将4放到最后:...,创建一个新数组,从头扫描,遇到偶数放后边,遇到奇数放前边。...快速排序,有一个分区操作,是将整个数组大于基准部分,放右边,而小于基准部分放右边,即根据基准,将数组一分为二。其实在这里,同样可以参考这个思路,只不过跟基准比大小,变成了判断是奇还是偶。...这里简单描述一下该思路,更多细节可以参考《快速排序优化详解》如何将元素移动到基准两侧一节: 定义下标i和j,分别从开头和结尾开始扫描 当i遇到偶数时,停止扫描 当j遇到奇数时,停止扫描 此时交换i和j

    89110

    剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

    题目描述: 输入一个整数数组,实现一个函数来调整该数组数字顺序,使得所有的奇数位于数组前半部分,所有的偶数位于位于数组后半部分,并保证奇数奇数偶数偶数之间相对位置不变。...我们申请另外两个数组,每次输入数据时,直接比对是奇数还是偶数,顺序存放在两个数组,并记录下标的变化。...,直接在原始数组上,进行移动。...,就是数组元素全是偶数,或者全是奇数,显然就不需要进行其他操作了。...,找到第一个奇数i,和第一个偶数j后,继续寻找第二个奇数i',然后把i'到j元素向后移,把i'放到j位置上。

    55960
    领券