【 NO.1 檢查字符串是否爲數組前綴】算法
解題思路
簽到題,暴力鏈接字符串檢查是否相等便可。數組
代碼展現網絡
class Solution {
public boolean isPrefixString(String s, String[] words) {優化
String t = ""; for (var word : words) { t += word; if (s.equals(t)) { return true; } } return false;
}
}code
【 NO.2 移除石子使總數最小】字符串
解題思路
貪心,每次移除最多的那一堆。it
代碼展現io
class Solution {
public int minStoneSum(int[] piles, int k) {class
PriorityQueue<Integer> heap = new PriorityQueue<>((a, b) -> (b - a)); for (int p : piles) { heap.add(p); } for (int i = 0; i < k; i++) { heap.add((heap.poll() + 1) / 2); } return heap.stream().mapToInt(a -> a).sum();
}
}求職
【 NO.3 使字符串平衡的最小交換次數】
解題思路
統計出有多少不匹配的括號對,即沒有左括號匹配的右括號。每次交換都能減小 2 個不匹配的括號對。
代碼展現
class Solution {
public int minSwaps(String s) {
int count = 0; int left = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '[') { left++; } else if (left != 0) { left--; } else { count++; } } return (count + 1) / 2;
}
}
【 NO.4 找出到每一個位置爲止最長的有效障礙賽跑路線】
解題思路
nlogn 的 LIS 算法,使用二分查找來優化 dp 遞推過程,定義 dp[i] 表示長度爲 i 的 LIS 的結尾最小值是多少,在 dp 上二分查找便可。
代碼展現
class Solution {
int binarySearch(int[] v, int r, int key) {
int l = 0; while (r - l > 1) { int m = (l + r) / 2; if (v[m] <= key) l = m; else r = m; } return v[r] <= key ? r : l;
}
public int[] longestObstacleCourseAtEachPosition(int[] obstacles) {
int[] dp = new int[obstacles.length]; int[] result = new int[obstacles.length]; result[0] = 1; dp[0] = obstacles[0]; int length = 1; for (int i = 1; i < obstacles.length; i++) { if (obstacles[i] < dp[0]) { dp[0] = obstacles[i]; result[i] = 1; } else if (obstacles[i] >= dp[length - 1]) { dp[length++] = obstacles[i]; result[i] = length; } else { int idx = binarySearch(dp, length - 1, obstacles[i]); dp[idx + 1] = Math.min(obstacles[i], dp[idx + 1]); result[i] = idx + 2; } } return result;
}
}
杭州上岸算法網絡科技有限公司上岸算法網絡科技有限公司是一家致力於用高質量,高互動性小班課程來幫助學生更好的在就業市場中定位以及求職的公司。咱們以頂級的課程質量,高互動性的教學方式以及獨特的小班教學模式來幫助學生更快的跨過求職的鴻溝,用最高效,經濟,合理的方式幫助更多學生快速找到求之不得的工做。