调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面(点击链接进入题目)
描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目分析:针对本题,我们有不同的方法来解决,本题中保证奇数和偶数之间的相对位置不变是一个难点,读者们可以分别考虑两种情况:a-相对位置变化;b-相对位置不变。
法一:我们很容易想到的一个方法就是对数组进行遍历,此时借助一个辅助数组newarray,遍历第一遍数组找出奇数,挨个尾插到newarray中,然后再遍历一遍,找出所有的偶数依次尾插,但是该方法不管是空间复杂度还是时间复杂度都是不推荐的。
class Solution {public:void reOrderArray(vector<int> &array) {vector<int> newarray;//遍历第一遍找出所有的奇数for(const auto& val : array){if(val % 2 != 0)newarray.push_back(val);}//遍历第二遍找出所有的偶数for(const auto& val : array){if(val % 2 == 0)newarray.push_back(val);}//赋值重载array = newarray;}
};
法二:我们还是malloc一块和array大小一样的空间newarray,然后定义start和end两个变量,start指向array数组的头,end指向array的尾,让start从头找奇数,找到并从newarray的头依次向后插入,end从尾找偶数,找到并从newarray的尾依次向前插入。
start找奇数的过程如下:(部分)
end找偶数的过程如下:(部分)
class Solution {public:void reOrderArray(vector<int> &array) {//开辟和array大小一样的数组newarrayvector<int> newarray(array.size());//定义start和end两个变量int start = 0;int end = array.size() - 1;//start从头部开始找奇数,并从newarray的头部依次向后插入int count = 0;while(start < array.size()){if(array[start] % 2 != 0)newarray[count++] = array[start];start++;}//end从尾部开始找偶数,并从newarray的尾部依次向前插入int sz = array.size();while(end >= 0){if(array[end] % 2 == 0)newarray[--sz] = array[end];end--;}array = newarray;}
};
法三:借助法二的方法,我们还是定义end和start,不过这时start和end同时去找奇数和偶数,start从头找奇数,找到便停下,end从尾找偶数,找到便停下,然后交换start和end两个位置的值,循环下去,但是这种方法得到的数组奇数和偶数的相对位置发生变化了。
class Solution {public:void reOrderArray(vector<int> &array) {int start = 0;int end = array.size() - 1;while(start < end){while(((start < end) && (array[start] & 1)))start++;while(((start < end) && !(array[end] & 1)))end--;swap(array[start], array[end]);}}
};
法四:要想保证相对位置不变,我们可以从前往后遍历数组,把偶数后移,腾出位置,放入奇数,即每找出一个奇数,把奇数前的位置全部后移一位,然后奇数插到最前面,奇数位置调整好之后,偶数位置自然就调整好了。
下图给了调整的两种情况的图:
class Solution {public:void reOrderArray(vector<int> &array) {int k = 0;//遍历整个数组for(int i = 0; i < array.size(); ++i){//找到奇数if(array[i] & 1){ //从左向右,每次遇到的,都是最前面的奇数,一定将来要被放在k下标处int temp = array[i]; //现将当前奇数保存起来int j = i;while(j > k){ //将该奇数之前的内容(偶数序列),整体后移一个位置array[j] = array[j-1];j--;}//将奇数保存在它将来改在的位置,因为我们是从左往右放的,没有跨越奇数,所以一定是相对位置不变的array[k++] = temp; }}}
};
调整数组顺序使奇数位于偶数前面相关推荐
- 剑指offer 调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 分析: 我的思路 ...
- 剑指offer-99.调整数组顺序使奇数位于偶数前面
0 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1 分析 两边倒 ...
- 剑指offer0JZ81 调整数组顺序使奇数位于偶数前面(二)(C++,附思路)
描述 输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对 ...
- 【LeetCode笔记】剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面(Java、双指针)
文章目录 题目描述 思路 & 代码 二刷 题目描述 有点像快排的交换操作 思路 & 代码 类似快排中的找法,具体见代码注释 class Solution {public int[] e ...
- 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
立志用最少的代码做最高效的表达 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输 ...
- 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
<LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...
- 剑指Offer #13 调整数组顺序使奇数位于偶数前面 | 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的 ...
- 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
剑指offer--面试题14:调整数组顺序使奇数位于偶数前面 Solution1: 顺序交换,比较好的算法!!! class Solution { public:void reOrderArray(v ...
- 剑指offer:面试题21. 调整数组顺序使奇数位于偶数前面
题目:调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4 ...
最新文章
- python一个图画两条曲线_用python建立两个Y轴的XY曲线图方法
- VMware View 5.0 Ready! 资源汇总(持续更新)
- linux shell trap的使用
- 最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)
- 如何绘制逻辑图 — 1. 逻辑图构成的三元素
- AVVision Organized Session (IROS'21) 征稿开启
- iphonexr电池容量_初代手机到iPhone 12,从电池容量变化看充电功率的发展
- php jquery mysql,使用PHP / MySQL搜索并使用jQuery动态更新
- SpringMVC 单文件上传与多文件上传
- 到 Google 面试去!开发者必读的避坑指南
- vue 打包之后不兼容ie_vue中使用的一些问题(IE不兼容,打包样式不生效)
- 关于解决vivado error:add_1 must be in range [-1,DEPTH-1] 问题
- activemq网页管理端使用_极周PC端(网页版)使用说明
- 28KHZ/40KHZ老款超声波开关线路板
- 微信小程序视频URL测试地址 MP4格式
- android 主流机型排行,安卓手机性能排行:华为Mate40 Pro仅排第四,第一名无可撼动...
- 国内外企业争食海淘:顺丰布局转运业务
- 行测:判断推理(逻辑判断)
- 如何查询网站服务器类型
- [CentOS Python系列] 五.阿里云部署web环境及通过IP地址访问服务器网页
热门文章
- 此生不戒多巴胺-冲刺日志(第二天)
- 8.4 输入某班学生某门课的成绩,(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数
- 翻译mosHow to Switch to a New Undo Tablespace (文档 ID 1951695.1)使用新的undo表空间和删除旧的表空间
- 思科交换机创建Vlan时出错的解决方法(二)
- aistarter助手程序未运行_[MBOT+ AI2] 出現aiStarter程式不在執行狀態中的解決方法...
- awk中的输入分隔符
- 【buu平台】[GXYCTF2019]BabySQli
- Speedoffice(word)如何查询文档字数
- 发现有道云笔记用的搜索也是clucene引擎
- 人工智能和文本分析:遵循的最佳方法