climbingLeaderBoard * needs: * supply *fixed lead

package com.microsoft.controller;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;

public class MicrosoftController {

	public static void main(String[] args) {
		System.out.println("Hello World!");
		List<Integer> ranked=new ArrayList<Integer>();
		ranked.add(100);
		ranked.add(90);
		ranked.add(90);
		ranked.add(80);
		System.out.println(ranked);
		List<Integer> player=new ArrayList<Integer>();
		player.add(70);
		player.add(80);
		player.add(105);
		List<Integer> indexList=climbingLeaderBoard(ranked,player);
		System.out.println(indexList);
	}
	
	/**
	 * climbingLeaderBoard
	 * needs:
	 * supply
	 * fixed leaderBoard score array is descending rank: [100,90,90,80]
	 * new player score array is ascending rank: [70,80,105]
	 * return a new array contains index position which new player fit to be right position
	 * new players should be came to the leaderBoared score array
	 * attention: American need be the first position and next position is next step rank player score
	 * constrains:
	 * n is number size means leaderBoared score array size
	 * m is number size means player score array size
	 * 1<=n<=10to5
	 * 1<=m<=10to5
	 * 0<=ranked[i]<=10to9 while 0<=i<n
	 * 0<=player[j]<=10to9 while 0<=j<m
	 * The existing leaderboard, ranked, is in descending order
	 * The player's scores, player, is in ascending order 
	 * Subtask
	 * For 60% of the maximum score:
	 * 1<=n<=200
	 * 1<=m<=200
	 * @param ranked
	 * @param player
	 * @return
	 */
	public static List<Integer> climbingLeaderBoard(List<Integer> ranked,List<Integer> player){
		if(!checkClimbingLeaderBoardData(ranked, player)) {
			return null;
		}
		List<CustIntArrEle> custIntArrEleList=buildNewOrderedLeaderBoard(ranked, player);
		List<Integer> retIntArrChangedIndexList=new ArrayList<Integer>();
		custIntArrEleList.forEach(e->{
			Boolean positionIndexChangedFlag=e.getIsChangedPositionIndexFlag();
			if(positionIndexChangedFlag) {
				int retNewOrderdPositionIndex=e.getIntArrEleIndexPositionTo();
				retIntArrChangedIndexList.add(retNewOrderdPositionIndex-1);
			}
		});
		return retIntArrChangedIndexList;
	}
	
	/**
	 * check climbingLeanderBoard data is right data
	 * constraints check
	 * @param ranked
	 * @param player
	 * @return
	 */
	public static Boolean checkClimbingLeaderBoardData(List<Integer> ranked,List<Integer> player) {
		if(ranked==null) {
			return false;
		}
		if(ranked.isEmpty()) {
			return false;
		}
		if(player==null) {
			return false;
		}
		int valRet=1;
		for (int i = 0; i < 5; i++) {
			valRet*=10;
		}
		int size = ranked.size();
		if(size<1 || size>valRet) {
			return false;
		}
		if(player.size()<1 || player.size()>valRet) {
			return false;
		}
		int valRet1=1;
		for (int i = 0; i < 9; i++) {
			valRet1*=10;
		}
		int rankedSize=ranked.size();
		for (int i = 0; i < rankedSize; i++) {
			int rankedEle=ranked.get(i);
			if(rankedEle<1 || rankedEle>valRet1) {
				return false;
			}
		}
		for (int i = 0; i < player.size(); i++) {
			int playerEle=player.get(i);
			if(playerEle<1 || playerEle>valRet1) {
				return false;
			}
		}
		if(!checkArrIsOrderedDesc(ranked)) {
			return false;
		}
		if(checkArrIsOrderedDesc(player)) {
			return false;
		}
		if(!checkArrEleIsRankedVolumn(ranked)) {
			return false;
		}
		if(!checkArrEleIsRankedVolumn(player)) {
			return false;
		}
		return true;
	}
	
	/**
	 * build new ordered leader board 
	 * @param ranked
	 * @param player
	 * @return
	 */
	public static List<CustIntArrEle> buildNewOrderedLeaderBoard(List<Integer> ranked,List<Integer> player){
		List<CustIntArrEle> concatnateIntArr = concatnateIntArr(ranked, player);
		for (int i = 0; i < concatnateIntArr.size(); i++) {
			CustIntArrEle custIntArrEle=concatnateIntArr.get(i);
			for (int j = 0; j < concatnateIntArr.size(); j++) {
				CustIntArrEle custIntArrEle1=concatnateIntArr.get(j);
				if(!(custIntArrEle.getIntArrEle()>custIntArrEle1.getIntArrEle())) {
					if(!checkIsAmericanNameList(null)) {
						custIntArrEle.setIsChangedPositionIndexFlag(true);
						custIntArrEle.setIntArrEleIndexPositionTo(custIntArrEle.getIntArrEleIndexPositionTo()+1);
					}
				}
			}
		}
		return concatnateIntArr;
	}
	
	
	/**
	 * check is in American name list
	 * @param nameList
	 * @return
	 */
	public static Boolean checkIsAmericanNameList(List<String> nameList) {
		return true;
	}
	
	/**
	 * concatnate two int arr by using oop design 
	 * wrapped to CustIntArrEle
	 * @param ranked
	 * @param player
	 * @return
	 */
	public static List<CustIntArrEle> concatnateIntArr(List<Integer> ranked,List<Integer> player){
		if(!checkClimbingLeaderBoardData(ranked, player)) {
			return null;
		}
		List<CustIntArrEle> newRankedConcatnateList=new ArrayList<CustIntArrEle>();
		for (int i = 0; i < ranked.size(); i++) {
			int intEle=ranked.get(i);
			CustIntArrEle custIntArrEle=new CustIntArrEle();
			custIntArrEle.setId(UUID.randomUUID().toString());
			custIntArrEle.setIntArrEle(intEle);
			custIntArrEle.setIntArrEleIndexPositionFro(i);
			newRankedConcatnateList.add(custIntArrEle);
		}
		for (int i = 0; i < player.size(); i++) {
			int intEle=player.get(i);
			CustIntArrEle custIntArrEle=new CustIntArrEle();
			custIntArrEle.setId(UUID.randomUUID().toString());
			custIntArrEle.setIntArrEleIndexPositionFro(i);
			newRankedConcatnateList.add(custIntArrEle);
		}
		return null;
	}
	
	/**
	 * check int array ele is ordered asc or desc
	 * @param intList
	 * @return
	 */
	public static Boolean checkArrIsOrderedDesc(List<Integer> intList) {
		if(intList==null) {
			return null;
		}
		if(intList.isEmpty()) {
			return null;
		}
		for (int i = 0; i < intList.size(); i++) {
			int intEle=intList.get(i);
			for (int j = 0; j < intList.size(); j++) {
				int intEle1=intList.get(j);
				if(!(intEle>intEle1)) {
					return false;
				}
			}
		}
		return true;
	}
	
	/**
	 * check int arr ele is in encloure 200
	 * and this intArrEle appearence frequency percentege equals 60%
	 * @param intList
	 * @return
	 */
	public static Boolean checkArrEleIsRankedVolumn(List<Integer> intList) {
		if(intList==null) {
			return null;
		}
		if(intList.isEmpty()) {
			return null;
		}
		Random random=new Random();
		int statisticCount=0;
		int count=0;
		while(true) {
			for (int i = 0; i < intList.size(); i++) {
				int intListRandomIndex=random.nextInt(intList.size());
				int randomIntEle=intList.get(intListRandomIndex);
				for (int j = 0; j < 200; j++) {
					int intEle=intList.get(j);
					if(randomIntEle==intEle) {
						statisticCount++;
					}
				}
			}
			if(count>1000000) {
				break;
			}
			count++;
		}
		BigDecimal intEleAppearenceFre=new BigDecimal("0.00");
		BigDecimal intEleAppearenceFreData=intEleAppearenceFre.multiply(new BigDecimal("100.00"));
		if(!(intEleAppearenceFreData.equals(new BigDecimal("60.00")))) {
			return false;
		}
		return true;
	}
}

class CustIntArrEle{
	private String id;
	private String name;
	private Integer intArrEleIndexPositionFro=1;
	private Integer intArrEleIndexPositionTo=1;
	private Integer intArrEle;
	private Boolean isAmerican=true;
	private Boolean isChangedPositionIndexFlag=false;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getIntArrEleIndexPositionFro() {
		return intArrEleIndexPositionFro;
	}
	public void setIntArrEleIndexPositionFro(Integer intArrEleIndexPositionFro) {
		this.intArrEleIndexPositionFro = intArrEleIndexPositionFro;
	}
	public Integer getIntArrEleIndexPositionTo() {
		return intArrEleIndexPositionTo;
	}
	public void setIntArrEleIndexPositionTo(Integer intArrEleIndexPositionTo) {
		this.intArrEleIndexPositionTo = intArrEleIndexPositionTo;
	}
	public Integer getIntArrEle() {
		return intArrEle;
	}
	public void setIntArrEle(Integer intArrEle) {
		this.intArrEle = intArrEle;
	}
	public Boolean getIsAmerican() {
		return isAmerican;
	}
	public void setIsAmerican(Boolean isAmerican) {
		this.isAmerican = isAmerican;
	}
	public Boolean getIsChangedPositionIndexFlag() {
		return isChangedPositionIndexFlag;
	}
	public void setIsChangedPositionIndexFlag(Boolean isChangedPositionIndexFlag) {
		this.isChangedPositionIndexFlag = isChangedPositionIndexFlag;
	}
	
}

#中国电信笔试##AI面会问哪些问题?##找AI工作可以去哪些公司?##从事AI岗需要掌握哪些技术栈?##你做过最难的笔试是哪家公司#
Java技术 文章被收录于专栏

JavaEE技术 编程开发经验 企业通用技术

全部评论

相关推荐

03-27 16:49
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务