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)1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 7 * 8 * 9 * @param array int整型一维数组 10 * @return int整型一维数组 11 */ 12 public int[] reOrderArray (int[] array) { 13 // write code here 14 int n=array.length; 15 int[] odd=new int[n]; 16 int[] eve=new int[n]; 17 int p1=0,p2=0; 18 for (int i=0;i<n;i++){ 19 if (array[i]%2==0) { 20 eve[p2]=array[i]; 21 p2++; 22 }else{ 23 odd[p1]=array[i]; 24 p1++; 25 } 26 } 27 for (int i=0;i<p1;i++){ 28 array[i]=odd[i]; 29 } 30 for (int i=p1;i<p1+p2;i++){ 31 array[i]=eve[i-p1]; 32 } 33 return array; 34 } 35 }
思路:将奇数跟偶数存在两个数组再修改原数组。
题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)输入描述:
保证数组输入非空,且保证有解1 public class Solution { 2 public int MoreThanHalfNum_Solution(int [] array) { 3 int ans=0; 4 int count=0; 5 for (int x:array) { 6 if (count==0) { 7 ans=x; 8 count++; 9 } 10 else { 11 if (ans!=x) count--; 12 else count++; 13 } 14 } 15 return ans; 16 } 17 }
思路:投票算法。待定一个预选值与计数,当计数为0时,预选值为当前值,如果下一个与当前一样,计数加1,否则计算减1。类似于把不同的抵消掉、
标签:count,le,2022,19,复杂度,day36,int,数组,array 来源: https://www.cnblogs.com/benbicao/p/16025515.html