欢迎光临散文网 会员登陆 & 注册

知名互联网公司校招中常见的算法题(11-13)

2023-04-26 06:43 作者:good7ob  | 我要投稿

题目11:两数之和

题目描述:

给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找出和为目标值的两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

解决思路:

我们可以用哈希表来解决这个问题。我们用一个哈希表来存储每个数的值和它的下标。对于每个数 nums[i],我们检查哈希表中是否存在 target - nums[i],如果存在,则返回对应的下标,否则将当前数和它的下标存入哈希表中。

代码实现:

public int[] twoSum(int[] nums, int target) {
  Map<Integer, Integer> map = new HashMap<>();
  for (int i = 0; i < nums.length; i++) {
      int complement = target - nums[i];
      if (map.containsKey(complement)) {
          return new int[] { map.get(complement), i };
      }
      map.put(nums[i], i);
  }
  throw new IllegalArgumentException("No two sum solution");
}

题目12:两数相加

题目描述:

给定两个非空链表,表示两个非负整数。它们每位数字都是按照逆序方式存储的,并且每个节点只能存储一位数字。将这两个数相加,返回一个新的链表表示它们的和。

解决思路:

我们可以用迭代的方法来解决这个问题。我们遍历两个链表,同时将它们的值相加,并将结果存储在新链表中。需要注意的是,如果其中一个链表为空,我们要将它的值视为 0。

代码实现:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  ListNode dummy = new ListNode(0);
  ListNode curr = dummy;
  int

题目13:字符串转换整数 (atoi)

题目描述:

int n = myAtoi(str);

请你来实现一个 atoi 函数,使其能将字符串转换成整数。该函数可以通过以下方式被调用:

解决思路:

我们可以用一个变量来记录当前数字的符号,同时用另一个变量来记录当前数字的值。遍历字符串,如果遇到数字,就将它加入当前数字的值中;如果遇到正负号,就记录当前数字的符号;如果遇到空格,就忽略;如果遇到其他字符,就停止遍历,返回当前数字的值。

代码实现:

public int myAtoi(String str) {
  int sign = 1;
  int num = 0;
  int i = 0;
  // Skip leading whitespace
  while (i < str.length() && str.charAt(i) == ' ') {
      i++;
  }
  // Check for sign
  if (i < str.length() && (str.charAt(i) == '+' || str.charAt(i) == '-')) {
      sign = (str.charAt(i) == '-') ? -1 : 1;
      i++;
  }
  // Build number
  while (i < str.length() && Character.isDigit(str.charAt(i))) {
      int digit = str.charAt(i) - '0';
      // Check for overflow
      if (num > Integer.MAX_VALUE / 10 || (num == Integer.MAX_VALUE / 10 && digit > 7)) {
          return (sign == -1) ? Integer.MIN_VALUE : Integer.MAX_VALUE;
      }
      num = num * 10 + digit;
      i++;
  }
  return sign * num;
}


知名互联网公司校招中常见的算法题(11-13)的评论 (共 条)

分享到微博请遵守国家法律