数组题(2021-7-2)

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判断是否大于数组长度的一半。然后返回。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值