2022-3-19 剑指offer day36
Posted 阿ming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-3-19 剑指offer day36相关的知识,希望对你有一定的参考价值。
题1:
JZ21 调整数组顺序使奇数位于偶数前面(一)
描述
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
数据范围:0 \\le n \\le 50000≤n≤5000,数组中每个数的值 0 \\le val \\le 100000≤val≤10000
要求:时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)
进阶:时间复杂度 O(n^2)O(n2),空间复杂度 O(1)O(1)
import java.util.*; public class Solution /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] reOrderArray (int[] array) // write code here int n=array.length; int[] odd=new int[n]; int[] eve=new int[n]; int p1=0,p2=0; for (int i=0;i<n;i++) if (array[i]%2==0) eve[p2]=array[i]; p2++; else odd[p1]=array[i]; p1++; for (int i=0;i<p1;i++) array[i]=odd[i]; for (int i=p1;i<p1+p2;i++) array[i]=eve[i-p1]; return array;
思路:将奇数跟偶数存在两个数组再修改原数组。
题2:
JZ39 数组中出现次数超过一半的数字
描述
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围:n \\le 50000n≤50000,数组中元素的值 0 \\le val \\le 100000≤val≤10000
要求:空间复杂度:O(1)O(1),时间复杂度 O(n)O(n)
输入描述:
保证数组输入非空,且保证有解
public class Solution public int MoreThanHalfNum_Solution(int [] array) int ans=0; int count=0; for (int x:array) if (count==0) ans=x; count++; else if (ans!=x) count--; else count++; return ans;
思路:投票算法。待定一个预选值与计数,当计数为0时,预选值为当前值,如果下一个与当前一样,计数加1,否则计算减1。类似于把不同的抵消掉、
以上是关于2022-3-19 剑指offer day36的主要内容,如果未能解决你的问题,请参考以下文章