java数组笔试题,Java数组题目
如何解决写爬虫IP受阻的问题?立即使用。
星级:* * * * *
1.顺时针打印矩阵。
(学习视频分享:java课程)
[标题]
输入一个矩阵,从外向内顺时针打印出每个数字。比如你输入如下44矩阵:1 2 3 4 5 6 7 8 9 10 11 1 2 13 14 15 16,依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7。
[代码]
public arraylistiteger print matrix(int[][]matrix){
int宽度,高度,x,y,计数,n;
高度=matrix.length
宽度=矩阵[0]。长度;
//遍历光标
x=0;
y=0;
count=0;
//元素的数量
n=高度*宽度;
boolean[][]flag=new boolean[height][width];
ArrayListInteger list=new ArrayList();
while (count n) {
//x不变,y增加
while (ywidth!flag[x][y]) {
list . add(matrix[x][y]);
flag[x][y]=true;
数数;
y;
}
y-;
x;
//x增加,y不变。
while (xheight!flag[x][y]) {
list . add(matrix[x][y]);
flag[x][y]=true;
数数;
x;
}
x-;
y-;
//x不变,y递减。
while (y=0!flag[x][y]) {
list . add(matrix[x][y]);
flag[x][y]=true;
数数;
y-;
}
y;
x-;
//x较小,y相同
while (x=0!flag[x][y]) {
list . add(matrix[x][y]);
flag[x][y]=true;
数数;
x-;
}
x;
y;
}
退货单;
}[思考]
注意边界是否出界,光标(x,y)经过x或y后定位在哪里,手动转弯。
2.在数组中出现超过一半时间的数字
[标题]
数组中有一个数字的长度超过了数组长度的一半。请找到这个号码。例如,输入一个长度为9 {1,2,3,2,2,2,5,4,2}的数组。因为数字2在数组中出现了五次,超过数组长度的一半,所以输出2。如果不是,输出0。
[代码]
包swear 2 offer . array;
导入Java . util . arrays;
公立半级学校{
/**
*数组中有一个数字超过了数组长度的一半。请找到这个号码。
*例如,输入长度为9 {1,2,3,2,2,2,5,4,2}的数组。
*由于数字2在数组中出现了5次,超过数组长度的一半,所以输出2。如果不是,输出0。
* */
public int MoreThanHalfNum _ Solution(int[]array){
int n,count,I,k;
n=数组长度;
if (n==0)返回0;
if (n==1)返回数组[0];
//标记数组
int[]flag=new int[n];
//对数组排序
Arrays.sort(数组);
count=1;
标志[0]=1;
for(I=1;在;i ) {
//因为它已排序,如果有相等的
if (array[i-1]==array[i]) {
数数;
}否则{
count=1;
}
flag[i]=计数;
}
count=0;
k=0;
for(I=1;在;i ) {
if(计数标志[i]) {
count=flag[I];
k=I;
}
}
返回计数n/2?array[k]:0;
}
}(相关面试问题推荐:java面试问答)
[代码2]
整理不需要的物品的巧妙方法:
使用preValue记录上次访问的值。计数表示当前值出现的次数。如果下一个值与当前值相同,则计数;如果count-不同,当它减少到0时,需要替换新的preValue值,因为如果有一个值超过数组长度的一半,那么最后的preValue必须是这个值。
public int MoreThanHalfNum _ Solution(int[]array){
if(array==null array . length==0)返回0;
int pre value=array[0];//用于记录最后一条记录
int count=1;//preValue的出现次数(相减后)
for(int I=1;I数组.长度;i ){
if(array[i]==preValue)
数数;
否则{
count-;
if(count==0){
pre value=array[I];
count=1;
}
}
}
int num=0;//你需要判断是否真的大于1/2。
for(int I=0;I数组.长度;我)
if(array[i]==preValue)
num
return (num array.length/2)?pre value:0;
}[思考]
当I从1而不是0开始时,通常需要特别考虑只有一个元素的情况。
3.连续子阵列的最大和
[标题]
给定一个数组,返回其最大连续子序列之和,例如:{6,-3,-2,7,-15,1,2,2}。连续子向量的最大和是8(从第0到第3)
[代码]
/**
*给定一个数组,返回其最大连续子序列的和。
*
*例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和是8(从第0到第3)
*
*非常典型的差压
*
*动态轨距通常分为两个不同的方向:前推和反推。
*元素:边界、状态转移公式、数组代表意义。
*数组[]
* dp[x],每个正数连续达到x时的最大和,即连续子序列的最大和。
*注:1。从第一个正数2开始。这是一个连续的序列。
*通常,连续序列的复杂度为O(n),不连续序列的复杂度为O(n*n)
* */
public int FindGreatestSumOfSubArray(int[]array){
int n,I,len,res
int[]DP;
n=数组长度;
if (n==0 array==null)返回0;
if (n==1)返回数组[0];
DP=new int[n];
DP[0]=array[0];
len=0;
RES=array[0];
for(I=1;在;i ) {
len=DP[I-1]array[I];
if (dp[i-1] 0) {
DP[I]=array[I];
}否则{
DP[I]=len;
}
if(RES DP[I])RES=DP[I];
}
返回res
}[想法]
从前向后遍历,最大连续子序列的和由当前元素和前一个最大连续子序列的和叠加而成。如果前面连续子序列的和大于零,我们可以继续累加。如果它小于零,我们需要丢弃以前的子序列,并从当前数字开始再次累加。时间复杂度为O (n)
4.整数中1出现的次数
[标题]
求1在1到13的整数中出现的次数,计算1在100到1300的整数中出现的次数?为此,他数出了1~13的数字,包括1、10、11、12、13,所以出现了6次,但对于后一个问题,他很无奈。ACMer希望你能帮帮他,让问题更一般化。可以快速找出1在任意非负整数区间的出现次数(从1到n中1的出现次数)。
[代码]
public int number of 1 between 1 and n _ Solution(int n){
if (n==1)返回1;
int nCount,I,j;
nCount=0;
for(I=1;I=n;i ) {
j=I;
while (j 0) {
if(j==1)n count;
j=j/10;
}
}
返回nCount
}[思考]
不要递归写,最简单的循环就好。
5.难看的数字
[标题]
只包含质因数2、3、5的数叫做丑数。例如,6和8是丑陋的数字,但14不是,因为它包含质量因子7。传统上,我们认为1是第一个丑陋的数字。按照从小到大的顺序找出第n个丑的数字。
[代码]
/**
*只包含质因数2、3、5的数称为丑数。
*例如,6和8是丑陋的数字,但14不是,因为它包含质量因子7。
*传统上,我们认为1是第一个丑陋的数字。按照从小到大的顺序找出第n个丑的数字。
*
*从现有的难看数字中选择一个,分别为*2,*3,*5,然后取最小的一个。
*最小的索引,并赋值
* */
public int GetUglyNumber _ Solution(int index){
if (index==0)返回0;
int p2,p3,p5,I,temp
p2=P3=P5=0;
int[]RES=new int[index];
RES[0]=1;
for(I=1;iindexi ) {
res[i]=Math.min(res[p2]*2,Math.min(res[p3]*3,RES[P5]* 5));
if(RES[I]==RES[p2]* 2)p2;
if(RES[I]==RES[P3]* 3)P3;
if(RES[I]==RES[P5]* 5)P5;
}
return RES[index-1];
}[思考]
在对具有某些属性的序列进行排序时,可以考虑这种方法。
推荐:java入门。以上是java面试常见数组问题总结(三)的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。