科大笔试讯飞题目(春招算法工程师)
科大讯飞题目(春招算法工程师)
1、
就是排序后然后找最低的改成100,直到平均分大于等于X分结束,计算操作次数。
2、
合并右边小的数 最后是第一个数字 加上严格递增的数组,记录操作数。
AC代码如下,第一题python怎么写都不对,改成java就AC了。
package Leetcode;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Main1 {
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
ArrayList<Integer> ans = new ArrayList<>();
for (int i = 0; i < t; i++) {
int ops = 0;
int n = in.nextInt();
int X = in.nextInt();
ArrayList<Integer> arr = new ArrayList<>();
for (int k = 0; k < n; k++) {
arr.add(in.nextInt());
}
Collections.sort(arr);
if (getAvg(arr) >= X) {
// ans.add(ops);
System.out.println(ops);
continue;
}
for (int c = 0; c < arr.size(); c++) {
arr.set(c, 100);
ops++;
if (getAvg(arr) >= X) {
// ans.add(count);
System.out.println(ops);
break;
}
}
}
if(ans.size() == 0){
return;
}
// for (int i = 0; i < ans.size(); i++) {
// System.out.println(ans.get(i));
// }
}
private static double getAvg(ArrayList<Integer> arr) {
int sum = 0;
for (int i = 0; i < arr.size(); i++) {
sum += arr.get(i);
}
return sum / (double) arr.size();
}
}
2、
n = int(input())
arr = list(map(int,input().strip().split(" ")))
def getNums(arr):
ans = 0
idx = 1
flag = True
while(flag):
nextLis = [arr[0]]
ans += 1
for idx in range(1,len(arr)):
if arr[idx] > arr[idx-1]:
nextLis.append(arr[idx]) #记录可以留下来的
if len(nextLis)==len(arr):
break
arr = nextLis
return ans-1
print(getNums(arr))