【剑指offer - C++/Java】13、调整数组顺序使奇数位于偶数前面

在线题目链接:调整数组顺序使奇数位于偶数前面

文章目录

  • 1 题目描述
  • 2 题目分析
    • 2.1 方法1
      • 2.11 Java代码
      • 2.12 C++代码
    • 2.2 方法2
      • 2.21 Java代码
      • 2.22 C++代码
  • 3 总结

1 题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

2 题目分析

2.1 方法1

这道题很简单,常规的做法是开一个数组arr,遍历两边原数组,第一遍找到所有的奇数,依次存入arr,第二遍找到所有的偶数,依次存到arr。

注意:如果这道题没有要求奇数和奇数,偶数和偶数之间的相对位置不变,则可以使用前后两个指针向中间遍历,前指针遇到偶数则与后指针的数交换,同理后指针遇到奇数则与前指针的数交换

2.11 Java代码

import java.util.ArrayList;
import java.util.List;
public class Solution {public void reOrderArray(int [] array) {List<Integer> arr = new ArrayList<Integer>();for(int i=0;i<array.length;i++){if(array[i]%2==1)arr.add(array[i]);}for(int i=0;i<array.length;i++){if(array[i]%2==0)arr.add(array[i]);}for(int i=0;i<array.length;i++)array[i]=arr.get(i);}
}

2.12 C++代码

class Solution {
public:void reOrderArray(vector<int> &array) {vector<int> arr;int size=array.size();for(int i=0;i<size;i++){if(array[i]%2==1)arr.push_back(array[i]);}for(int i=0;i<size;i++){if(array[i]%2==0)arr.push_back(array[i]);}array.swap(arr);}
};

2.2 方法2

实际上,这道题的解法,还可以使用类似于冒泡排序的算法,只不过在这里当我们遇到相邻两个数的前一个数为偶数后一个数为奇数时,就交换两数。(这与冒泡排序中前一个数大于后一个数则交换很相似,所以称为类冒泡法)

这种方法也很好写,直接写两个for循环即可,注意数组不要越界即可

2.21 Java代码

public class Solution {public void reOrderArray(int [] array) {for(int i = 0;i < array.length;i++){for(int j = 0;j< array.length-i-1;j++){if(array[j]%2==0&& array[j+1]%2==1){int t = array[j];array[j]=array[j+1];array[j+1]=t;}}}}
}

2.22 C++代码

class Solution {
public:void reOrderArray(vector<int> &array) {for(int i = 0;i < array.size();i++){for(int j = 0;j< array.size()-i-1;j++){if(array[j]%2==0&& array[j+1]%2==1){int t = array[j];array[j]=array[j+1];array[j+1]=t;}}}}
};

还可以使用C++STL中的stable_partition函数:

class Solution{
public:static bool cmp(int n){  return ((n & 1) == 1); }void reOrderArray(vector<int> &array){stable_partition(array.begin(),array.end(),cmp); //把奇数排在前面}
};

3 总结

注意考虑交换后奇数与奇数,偶数与偶数的相对位置保持不变。

探讨学习加:
个人qq:1126137994
个人微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Camparable与Comparator之区别

一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的&#xff0c;这个类对象组成的集合就可以直接使用sort方法排序。 Comparator可以看成一种算法的实现&#xff0c;将算法和数据分离&#xff0c;Comparator也可以在下面两种环境下使用&#xff1a; 1、类的设计…

【剑指offer - C++/Java】14、链表中倒数第k的节点

在线题目链接&#xff1a;链表中倒数第k的节点 文章目录1 题目描述2 题目分析2.1 Java代码2.2 C代码3 总结1 题目描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 2 题目分析 这道题比较简单。常规做法是先求出链表的总的节点个数n&#xff0c;然后再从头开始找第n-…

beta:scrum5

今天的工作 周一的工作 困难 王佳磊 收集数据&#xff0c;build了online的数据库, 38934 38939&#xff0c;收集更多数据&#xff0c;在新的API环境下&#xff0c;逐步发现并fix掉以前姓名到ID映射的bug. API的改动&#xff0c;ID的合并 肖巍&#xff0c;兰翠玲 等待测…

【软件开发底层知识修炼】十三 链接器-如何写出不依赖C库函数的代码

本文将综合以下4篇文章&#xff0c;学习如何写出不依赖libc库的程序&#xff1a; 【软件开发底层知识修炼】九 链接器-可重定位文件与可执行文件【软件开发底层知识修炼】十 链接器-main函数不是第一个被执行的函数【软件开发底层知识修炼】十一 链接器-链接脚本【软件开发底层…

前端学习(218):属性选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>属性选择器&…

【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用

前面几篇文章学习了链接器相关的内容。现在开始来学习GDB调试。我们的目的是通过这几篇文章将GDB调试完全学会。 文章目录1 为什么需要GDB2 GDB 的常规应用3 GDB调试程序实例4 总结1 为什么需要GDB 什么是GDB&#xff1f; GNU项目中的调试器&#xff08;gnu debuger&#xff0…

前端学习(219):css伪类选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS伪类<…

【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试

上一篇文章我们学习了使用GDB的最基本方法&#xff1a;【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用 本篇文章将学习GDB的断点调试。断点调试是一种非常重要的调试方法。 文章目录1 断点类型2 GDB软件断点调试相关操作2.1 通过函数名设置断点2.2 通过文件名行号…

Informix IDS 11体系操持(918测验)认证指南,第 4 部门: 机能调优(1)

对 IBM Informix Dynamic Server (IDS) 和它的分比如子体系举行调优&#xff0c;以失掉最佳机能。在一个冗长的概述之后&#xff0c;本教程给出了一些关于怎样检查数据库做事器及其子体系的例子。本文是这个分 8 部门的 系列教程 的第 4 部门&#xff0c;这个教程可以帮手您筹办…

前端学习(220):伪元素选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS伪元素&l…

【软件开发底层知识修炼】十六 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变

上一篇文章我们学习了如何使用GDB进行软件断点调试和硬件断点调试&#xff1a;【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试本篇文章继续上一篇文章的学习&#xff0c;如何使用GDB的数据断点监测内存中的变量是否被改变 文章目录1 GDB的数据断点1.1 利…

AllTray-将办法最小化到琐细托盘

Toy Posted in AppsAllTray 是一个很有效的小办法&#xff0c;操纵它你可以将办法的窗口最小化到琐细托盘&#xff0c;从而腾出桌面空间以作它用。此办法主要为那些没有原生供给最小化到琐细托盘成效的办法而预备的。今朝&#xff0c;AllTray 可以在 GNOME、KDE、Xfce、Fluxbox…

【软件开发底层知识修炼】十七 快速学习GDB调试四 使用GDB进行函数调用栈的查看

上一篇文章学习了如何使用GDB数据断点进行内存监测&#xff1a;【软件开发底层知识修炼】十五 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变本篇文章继续上一篇文章的学习&#xff1a;如何使用GDB进行函数调用栈的查看 文章目录1 backtrace和frame2 使用GDB进行函数调…

前端学习(221):字体属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS字体属性…

nload实时查看linux服务器网络流量的工具

如果你仅仅是想查询当前服务器的带宽,nload绝对是个很好用的一个工具,功能虽然很单一,但是很强.虽然不能像iptraf那样,可针对IP, 协议等条件来查询,可以实时地监控网卡的流量,分输入流量Incoming 和输出流量Outgoing两部分,同时统计当前,平均,最小,最大,总流量的值,并且用动态图…

前端学习(222):文本属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS文本属性…

【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧

上一篇文章学习了如何使用GDB进行函数调用栈的查看&#xff1a;【软件开发底层知识修炼】十六 快速学习GDB调试四 使用GDB进行函数调用栈的查看本篇文章是GDB调试快速学习系列的最后一篇。将综合前几篇文章做一个小的总结以及介绍一些在调试中使用的小技巧 文章目录1 调试中的小…

MongoDB学习笔记(一) MongoDB介绍及安装

系列目录 MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系MongoDB学习笔记(五) MongoDB文件存取操作MongoDB…

【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录

本文记录之前写过的5篇关于GDB快速学习的文章&#xff0c;从第一篇开始学习到最后一篇&#xff0c;保证可以从入门GDB调试到熟练掌握GDB调试的技巧。 学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 …

前端学习(224):iconfont矢量库

矢量库 一、如何下载iconfont图标。 在iconfont-阿里巴巴矢量图标库中有多种图标供你选择。比如我们选择其中的一个作为示例。 鼠标悬浮上后会出现三种选择&#xff1a; 1.添加入库&#xff1a;功能和淘宝中的购物…