这次算法岗出题太简单了, 让我这种菜鸡也体会到了ak的感受
第一题 最长回文子串 lc 5 原题
第二题 最大子序和 lc 53 原题
第三题 俄罗斯套娃 模拟题 没什么难度 按题意直接写就行
一开始java写只能过80% 后来改用python抄一遍就ac了...
n = int(input()) line = input().strip().split() nums = [int(x) for x in line] res = 0 size = len(nums) while True: for i in range(size-2, -1, -1): if nums[i] > nums[i+1]: nums[i+1] = 0 nums = [num for num in nums if num != 0] if size == len(nums): break else: res += 1 size = len(nums) print(res)
附上java通过80%代码 编译环境提示数组下标越界 原因不明 希望大神能够解答下java坑在什么地方
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(sc.nextInt()); } if (n == 0) { System.out.println(0); return; } int res = 0; int size = list.size(); while (true) { list = operate(list); if (list.size() != size) { res++; size = list.size(); } else { break; } } System.out.println(res); } static ArrayList<Integer> operate(ArrayList<Integer> list){ for (int i = list.size()-2; i >= 0 ; i--) { if (list.get(i+1) < list.get(i)) list.set(i+1, 0); } ArrayList<Integer> res = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (list.get(i) != 0) res.add(list.get(i)); } return res; } }
全部评论
(2) 回帖