Skip to main content

2441. Largest Positive Integer That Exists With Its Negative

Đề bài :

Cho một mãng số nguyên nums không chứ số 0, tìm phần tử lớn nhất là K sao cho -K cũng tồn tại trong mãng này Trả về số nguyên K, nếu không có số nào thỏa điều kiện thì trả về -1

Example 1:

Input: nums = [-1,2,-3,3]

Output: 3

Explanation: 3 is the only valid k we can find in the array.

Example 2:

Input: nums = [-1,10,6,7,-7,1]

Output: 7

Explanation: Both 1 and 7 have their corresponding negative values in the array. 7 has a larger value.

Example 3:

Input: nums = [-10,8,6,7,-2,-3]

Output: -1

Explanation: There is no a single valid k, we return -1.

Constraints:

  • 1 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • nums[i] != 0

Bài giải :

/**
 * @param {string} word
 * @param {character} ch
 * @return {string}
 */
var findMaxK = function(nums) {
  let largest = -1;
    for (let i = 0; i < nums.length; i++) {
        const num = nums[i];
        if (nums.includes(-num) && num > largest) {
            largest = num;
        }
    }

    return largest;  
};

Giải thích code:

Thuật toán này có độ phức tạp là 0(n^2)

Độ phức tạp về không gian là O(n)

  1. Tạo một biến để lưu lại giá trị lớn nhất trong mãng
  2. chạy vòng lặp for bắt đầu từ vị trí số 0 đến cuối mãng
  3. kiểm tra điều kiện nếu nums có phần tử -num và num > largest
  4. Trả về biến largest chứ số nguyên lớn nhất thoải điều kiện còn nếu không có số nào thì trả về -1

Cách làm 2

/**
 * @param {string} word
 * @param {character} ch
 * @return {string}
 */
var findMaxK = function (nums) {
  let setArray = new Set();
  let max = -1;
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] < 0) {
      setArray.add(nums[i]);
    }
  }
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] > max && setArray.has(-nums[i])) {
      max = nums[i];
    }
  }
  return max;
};

Giải thích code:

Thuật toán này có độ phức tạp là 0(n)

Độ phức tạp về không gian là O(n)

  1. Tạo 1 new Set đặt tên là setArray
  2. Chạy vòng lặp từ đầu đến cuối và kiểm tra điều kiện nếu nums[i] < 0 thì lưu vào set
  3. tiếp tục chạy 1 vòng lặp nữa từ 0 đến cuối tìm phần tử lớn nhất và kiểm tra có giá trị âm của phần tử đó trong Set không nếu có thì phần tử đó hợp lệ và so sánh với max