1.调整数组顺序使奇数位于偶数前
import java.util.*;
public class Solution{
public int[] reOrderArray(int[] array){
if(array.length==0) return array;
Queue<Integer> jishu=new LinkedList<>();
Queue<Integer> oushu=new LinkedList<>();
for(int i=0;i<array.length;i++){
if(array[i]%2!=0){
jishu.add(array[i]);
}else{
oushu.add(array[i]);
}
}
for(int i=0;i<array.lenght;i++){
if(!jishu.isEmpty()){
array[i]=jishu.poll();
}else{
array[i]=oushu.poll();
}
}
}
}
思路:1.创建一个奇数的队列和一个偶数的队列
2.将数组的数分成奇数和偶数,分别添加进奇数和偶数的队列。
3.然后将奇数的队列的数先放进数组里,然后将偶数在放进数组里。
2.顺时针打印矩阵
import java.util.ArrayList;
public class Soluton{
public ArrayList<Integer> printMatrix(int [][] matrix){
ArrayList<Integer> res=new ArrayList<>();
if(matrix==null||matrix.length==0) return res;
int r1=0,r2=matrix.length-1;
int c1=0,c2=matrix[0].length-1;
while(r1<=r2&&c1<=c2){
for(int c=c1;c<=c2;c++){
res.add(matrix[r1][c]);
}
for(int r=r1+1;r<=r2;r++){
res.add(matrix[r][c2]);
}
if(r1<r2&&c1<c2){
for(int c=c2-1;c>c1;c--){
res.add(matrix[r2][c]);
}
for(int r=r2;r>r1;r--){
res.add(matrix[r][c1]);
}
}
r1++;
r2--;
c1++;
c2--;
}
return res;
}
}
思路:1.创建一个新的res集合。
2.如果数组为空,或者长度为0,那么返回res
3.定义横坐标:r1=0;r2=matrix.length-1;
定义纵坐标:c1=0;c2=matrix[0].length-1;
4.遍历:从左往右,从上往下。并判断是否会重复打印(从右往左,从下往上)。最后返回res。
3.数组中出现次数超过一半的数字
import java.util.*;
public class Solution{
public int MoreThanHalfNum_Solution(int [] array){
if(array.length==0) return 0;
int len=array.length;
int threshold=len/2;
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<len;i++){
if(!map.keySet().contains(array[i])){
map.put(array[i],1);
}else{
map.put(array[i],map.get(array[i])+1);
}
}
for(Integer key:map.keySet()){
if(map.get(key)>threshold){
return key;
}
}
return 0;
}
}
思路:1.给定的array长度为0 返回0
2.定义数组的长度和数组长度的一半。
3.创建一个双列集合
4.遍历数组,可以为数组中的数字,value为数组中出现的次数。
5.通过value判断是否大于数组长度的一半。然后返回。