腾讯笔试 后台开发4ac
链表分组
- 直接根据值分组
- 核心模式,没有代码
n个魔法球,破坏魔法球可以获得能量x,并且给其他魔法球增加能量x
贪心,从最大取
坑点:取余
static long func1(long[] f, int n) { Arrays.sort(f); long ans = 0, cur = 0; int mod = 1000000007; for (int i = n - 1; i >= 0; i--) { f[i] += cur; f[i] %= mod; ans += f[i]; ans %= mod; cur += f[i]; cur %= mod; } return ans % 1000000007; }
小船无数,载重w,n个人,每条船可以有2种方式
2个人,载重为偶数
1个人
思路:
奇偶分组,贪心去去匹配
static int func3(int[] f, int w) { List<Integer> a = new ArrayList<>(), b = new ArrayList<>(); for (int i : f) { if (i % 2 == 0) { a.add(i); } else { b.add(i); } } int[] aa = a.stream().mapToInt(Integer::intValue).toArray(); int[] bb = b.stream().mapToInt(Integer::intValue).toArray(); Arrays.sort(aa); Arrays.sort(bb); return funcc3(aa, w) + funcc3(bb, w); }
static int funcc3(int[] f, int w) { int l = 0, r = f.length - 1; int ans = 0; while (l < r) { if (f[l] + f[r] > w) { r--; continue; } ans++; l++; r--; } return f.length - ans; }
长度为n的字符串s,找到长度为k的字典序最大子序列
遍历s,查看当前字符c是不是比之前的字符串c1要大,大则弹出
static String func4(String s, int k) { StringBuilder sb = new StringBuilder(); int n = s.length(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); while (sb.length() > 0 && sb.charAt(sb.length() - 1) < c && sb.length() + s.length() - i > k) { sb.deleteCharAt(sb.length() - 1); } if (sb.length() < k) { sb.append(c); } } return sb.toString(); }
待大佬补充