旷视08.30笔试 AC
1. 和打家劫舍一样
public class Solution { public static void main(String[] args) { int[] nums = new int[]{200, 700, 300, 100, 900}; System.out.println(new Solution().max_steps(nums)); } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param nums int整型一维数组 每个跑步机最大步数 * @return int整型 */ public int max_steps(int[] nums) { // write code here int n = nums.length; if (n == 0) { return 0; } long[][] dp = new long[n][2]; dp[0][0] = 0; dp[0][1] = nums[0]; for (int i = 1; i < n; i++) { dp[i][1] = dp[i - 1][0] + nums[i]; dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]); } return (int) Math.max(dp[n - 1][1], dp[n - 1][0]); } }2. 使用DFS会栈溢出,可以使用Deque来做
import java.util.Deque; import java.util.LinkedList; public class Solution { public static void main(String[] args) { int[] arr = new int[]{3, 2, 1, 3, 0, 3, 1, 2, 1}; int start = 2; System.out.println(new Solution().jump_game(arr, start)); } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * <p> * 可以到达时返回True,否则返回False * * @param arr int整型一维数组 非负整数数组 * @param start int整型 起始下标 * @return bool布尔型 */ public boolean jump_game(int[] arr, int start) { // write code here int n = arr.length; if (start < 0 || start >= n) { return false; } boolean[] visit = new boolean[n]; Deque<Integer> deque = new LinkedList<>(); deque.addLast(start); while (!deque.isEmpty()) { int num = deque.removeFirst(); if (visit[num]) { continue; } else { if (arr[num] == 0) { return true; } else { visit[num] = true; if (num + arr[num] >= 0 && num + arr[num] < n) { deque.add(num + arr[num]); } if (num - arr[num] >= 0 && num - arr[num] < n) { deque.add(num - arr[num]); } } } } return false; } }