剑指offer21(Java)-调整数组顺序使奇数位于偶数前面(简单)
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
方法一:另创建数组
1 class Solution {
2 public int[] exchange(int[] nums) {
3 if (nums.length == 0 || nums == null) return new int[0];
4 int[] ans = new int[nums.length];
5 int n = 0, m = nums.length - 1;
6 while(n <= m){
7 for (int i = 0; i < nums.length; i++){
8 if (nums[i] % 2 == 0){
9 ans[m] = nums[i];
10 m--;
11 }else{
12 ans[n] = nums[i];
13 n++;
14 }
15 }
16 }
17 return ans;
18 }
19 }
方法二:双指针,利用位运算进行优化
1 class Solution {
2 public int[] exchange(int[] nums) {
3 if (nums.length == 0) return new int[0];
4 int n = nums.length;
5 int i = 0, j = n - 1;
6 while(i <= j){
7 if ((nums[i] & 1) == 1){
8 i++;
9 }else if ((nums[j] & 1) == 0){
10 j--;
11 }else if ((nums[i] & 1) == 0 && (nums[j] & 1) == 1){
12 int temp = nums[i];
13 nums[i] = nums[j];
14 nums[j] = temp;
15 }
16 }
17 return nums;
18 }
19 }
或者
1 class Solution {
2 public int[] exchange(int[] nums) {
3 if (nums.length == 0) return new int[0];
4 int n = nums.length;
5 int i = 0, j = n - 1;
6 while(i < j){
7 while (i < j && (nums[i] & 1) == 1) i++;
8 while (i < j && (nums[j] & 1) == 0) j--;
9 if ((nums[i] & 1) == 0 && (nums[j] & 1) == 1){
10 int temp = nums[i];
11 nums[i] = nums[j];
12 nums[j] = temp;
13 }
14 }
15 return nums;
16 }
17 }
注意:内部while循环也要判断一下的理由:当数组全部为奇数[1,3,5,7]或全部为偶数[2,4,6,8]时,当走到最边上的数后就会越界。
小知识:
判断奇偶性:用位运算代替 (% 2)
(nums[i]&1)==1 奇数判断,原理:奇数的最低位为1
(nums[i]&1)==0 偶数判断,原理:偶数的最低位为0
&运算规则: 0&0=0;0&1=0;1&0=0;1&1=1 即:两个同时为1,结果为1。
注意:位运算的优先级比较低,不要吝啬括号的使用。
剑指offer21(Java)-调整数组顺序使奇数位于偶数前面(简单)的更多相关文章
- 【剑指offer-21】调整数组顺序使奇数位于偶数前面,C++实现(冒泡排序)
1.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分. 2.思路 本题有两种解法,一种是不保证数组稳定性的解法,一种是保 ...
- 剑指Offer:调整数组顺序使奇数位于偶数前面【21】
剑指Offer:调整数组顺序使奇数位于偶数前面[21] 题目描述 输入一个整形数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题分析 使用插 ...
- 剑指offer:调整数组顺序使奇数位于偶数前面
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...
- 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...
- 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...
- 【剑指Offer】调整数组顺序使奇数位于偶数前面 解题报告(Python)
[牛客网]调整数组顺序使奇数位于偶数前面 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc4 ...
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
- 剑指offer-7:调整数组顺序使奇数位于偶数前面
一.相对位置可以改变 1.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分. 2.分析 不考虑相对位置,可以类比快排,用左右 ...
- Go语言实现:【剑指offer】调整数组顺序使奇数位于偶数前面
该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和 ...
- 剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...
随机推荐
- deepin版的微信无法启动
我在网上找了半天的了,出现问题的原因应该是deepin-wine的问题: 既然是deepin-wine出了问题,那重装一下就好了,嗯~ 我直接,yay!结果发现有一个deepin-wine需要更新,更 ...
- java list转set用法
参考:https://blog.csdn.net/kye055947/article/details/80561633 之前一直被这两list转set,set转list所烦恼,今天整理了下两者之间怎么 ...
- 今日学习:位运算&中国剩余定理
-2^ 31的补码是-0.也就是 1000 0000 0000 0000 0000 0000 0000 0000 补码是原码取反加1 x&(-x) 是最低位为1的位为1,其余位为0. 中国剩余 ...
- 安装centos系统必做操作
关闭SELinux sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config 在Linux系统中临时关闭SELinux(Security-E ...
- Java valueOf() 方法---->摘抄
valueOf(boolean b): 返回 boolean 参数的字符串表示形式.. valueOf(char c): 返回 char 参数的字符串表示形式. valueOf(char[] data ...
- 记录--开始使用Vue 3时应避免的10个错误
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue 3 稳定已经有一段时间了.许多代码库正在生产中使用它,其他人最终也必须进行迁移.我有机会与它一起工作,并记录了我的错误,这可能是你 ...
- 一键解决App应用分发下载问题
本文深入分析了App应用分发下载失败的常见原因,并提供了针对网络连接问题.服务器故障.设备存储空间不足.文件大小和格式不受支持等方面的解决方法.此外,还附带了一个在线证书制作工具的案例演示,旨在帮助开 ...
- Python 批量合并csv文件
一.批量合并csv文件<方法1> import pandas as pd import glob import os # 获取所有CSV文件的路径 file_paths = glob.gl ...
- [Spring]aop的配置与使用
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/129907717 出自[进步* ...
- KingbaseES V8R6集群运维案例之---在线扩容节点通讯故障问题
案例说明: KingbaseES V8R6集群节点之间通过ssh或securecmdd工具通讯,默认节点之间通过公钥和私钥方式认证,可以密码通讯:在执行集群节点扩容时,出现以下故障,节点之间仍需要输入 ...