在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?-笔试面试资料

这是qklbishe.com第19765 篇笔试面试资料
提供答案分析,通过本文《在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:
在一个数字队列变化游戏中,初始时玩家会得到一个有在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?个数字元素的队列,每个元素为在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?位的数字(可能包含先导在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?

在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少? 零葬

双指针+贪心

主要目的:力求能够连续取出更多的小元素。left指针指向0,right指针指向n-1。移动所指元素小的指针,如果两个指针指的元素相同,就看它们两哪个离更小的元素更近,离小元素近的指针先动。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException;  public class Main {     public static void main(String[] args) throws IOException {         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         int n = Integer.parseInt(br.readLine());         String[] strArr = br.readLine().split(" ");         int[] arr = new int[n];         for(int i = 0; i < n; i++){             arr[i] = Integer.parseInt(strArr[i]);         }         StringBuilder sb = new StringBuilder();         int left = 0, right = n - 1;         while(left <= right){             if(left == right){                 sb.append(arr[left++]);             }else{                 if(arr[left] < arr[right]){                     sb.append(arr[left++]);                 }else if(arr[left] > arr[right]){                     sb.append(arr[right--]);                 }else{                     if(left2right(arr, left, right)){                         sb.append(arr[left++]);                     }else{                         sb.append(arr[right--]);                     }                 }             }         }         System.out.println(sb);     }          // 检查两个指针哪个离小元素更近     private static boolean left2right(int[] arr, int left, int right) {         boolean flag = false;         while(left < right){             if(arr[left] == arr[right]){                 // 相等同时移动                 left++;                 right--;             }else{                 if(arr[left] < arr[right]){                     flag = true;    // 左指针先碰到小元素,先动左指针,否则先动右指针                 }                 break;             }         }         return flag;     } }

2022-01-04 17:23:46 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 在一个数字队列变化游戏中,初始时玩家会得到一个有个数字元素的队列,每个元素为中的一个。玩家每次可以从队列首部或者尾部取出一个数字,把它放在新队列的尾部,重复此操作直到所有数字都被取出,新队列会组成一个位的数字(可能包含先导)。现在想知道对于每局游戏,你在规则允许的条件下能获得的最小的数字是多少?-笔试面试资料

提供最优质的资源集合

立即查看 了解详情