阿里灵犀互娱 4-19 算法笔试答案
1 找缺失的数字,使用哈希表进行记录,数组中不存在那么k就-1
public static int findMissingNum(int[] nums, int k) {
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int start = nums[0];
// int ans = start + 1;
while (k > 0) {
start++;
if (!set.contains(start)) {
k--;
}
}
return start;
}
2 二叉树求根节点到叶子节点的和
隔壁 112. 路径总和 原题
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) return false;
if (root.val == sum) {
if (root.left == null && root.right == null) return true;
}
boolean left = false;
if (root.left != null) {
left = hasPathSum(root.left, sum - root.val);
}
boolean right = false;
if (root.right != null) {
right = hasPathSum(root.right, sum - root.val);
}
return left || right;
}
3 在一个长字符串中寻找特定的字符串
使用系统api就行,我用的是Java的String的contain
public int[][] indexPairs(String text, String[] words) {
ArrayList<int[]> temp = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
String word = words[i];
String tempText = text;
while (tempText.contains(word)) {
int start = tempText.indexOf(word);
int[] index = new int[]{start, start + word.length() - 1};
temp.add(index);
char[] cs = tempText.toCharArray();
//不知道这里为啥是-1 但是这样就能过100%了
for (int j = start; j < start + word.length()-1; j++) {
cs[j] = '7';
}
tempText = String.valueOf(cs);
// tempText.in
// tempText = tempText.replace(word, String.valueOf(Math.pow(10, words.length)));
// tempText = tempText.substring(start + word.length());
}
}
temp.sort((o1, o2) -> {
if (o1[0] != o2[0]) {
return o1[0] - o2[0];
} else {
return o1[1] - o2[1];
}
});
int[][] ans = new int[temp.size()][];
for (int i = 0; i < temp.size(); i++) {
ans[i] = temp.get(i);
}
return ans;
}
不知道这次为啥给双非都发笔试了,之前都是直接简历挂
#双非有机会进大厂吗##阿里求职进展汇总##灵犀互娱##笔试##软件开发笔面经#