腾讯音乐第三道编程题

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;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值