2023.4.13号的第三道编程笔试题
题目描述:给一个数字n,构成n*(n+1)/2大小的数组,包含1个1,2个2,n个n,最后输出的数组相邻的两个数字不相同,输出的数组可能不唯一。
例如:输入:4
输出:[4,3,4,3,4,3,4,2,1,2]
解题思路:我们其实可以发现,输出的数组中最大值n和次大值n-1是交叉存放的,然后再依次取剩下的最大值和次大值(sortt函数实现的功能)。
public class Solution {
public int[] fun (int n) {
int len=(n*(n+1))/2;
int[] arr=new int[len];
int[] res=new int[len];
int[] str=new int[len];
int[] arr2=new int[len];
int k1=0,sum1=0,sum2=0,k2=0,k3=0;
for(int i=n-1;i>=0;i-=2){
sum1=i+1;
sum2=i;
for(int j=0;j<sum1;j++){
arr[k1++]=sum1;
}
for(int j=0;j<sum2;j++){
res[k2++]=sum2;
}
str=sortt(arr,res,sum1,sum2);
for(int k4=0;k4<k1+k2;k4++) {
arr2[k3++]=str[k4];
}
k1=0;
k2=0;
}
return arr2;
}
public int[] sortt(int[] arr1,int[] arr2,int sum1,int sum2) {
int len=arr1.length+arr2.length;
int[] arr=new int[len];
int flag=0,k=0;
for(int i=0;i<len;i++) {
if(flag==0) {
arr[k++]=sum1;
flag=1;
}else if(flag==1){
arr[k++]=sum2;
flag=0;
}
}
return arr;
}