实现一个函数, // 判断一个给定整数数组中是否存在某两个元素之和恰好等于一个给定值 k, // 存在则返回 true,否则返回 false。

实现一个函数,判断一个给定整数数组中是否存在某两个元素之和恰好等于一个给定值 k,存在则返回 true,否则返回
false。该函数的输入参数有两个,第一个参数为整数数组 nums,第二个参数为整数 k,返回值为布尔值。【不要使用排序!要求时间复杂度为
O(n),n 为数组长度】

解决思路:遍历每个元素,让指定值减去每一个元素,得到的数字再判断是否在数组中存在,存在返回true,否则返回false


var checkTwoSum = function (nums, k) {
  if (nums.length >= 2) {
    var result = "";
    nums.forEach(item => {
      var i = k - item;
      var j = nums.indexOf(i); // 检验是否存在字符串  不存在返回 -1
      if (j == -1) {
        result = false;
      } else {
        result = true;
      }
    });
    return result;
  } else {
    console.log("数组元素至少需要两个");
  }
}
// 测试
// console.log(checkTwoSum([2, 4, 5], 9));  // true
// console.log(checkTwoSum([2, 4, 6], 9));  // false

第二种(使用排序)

  // 1.数组的长度必须大于等于2
  if (nums.length <= 1) {
    return false
  }
  // 2.先对数组排序
  nums.sort(function (a, b) {
    if (a > b) {
      return 1
    } else if (a < b) {
      return -1
    } else {
      return 0
    }
  })
  // 3.
  var i = 0;
  var j = nums.length - 1;
  while (i < j) {
    // console.log(nums[i] + nums[j]);
    if (nums[i] + nums[j] == k) {
      return true
    } else if (nums[i] + nums[j] < k) {
      i++;
    } else {

      j--;
    }
  }
  //4. 没有找到返回false
  return false;
};

// 测试
// console.log(checkTwoSum([2, 4, 1, 8, 5, 3, 11], 2));   // false
// console.log(checkTwoSum([2, 4, 1, 8, 5, 3, 11], 6));   // true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用哈希表来解决这个问题。首先将整数序列中的每个元素存储到哈希表中,然后遍历整个序列,对于每个元素i,查找哈希表中是否存在k-i。如果找到了,就说明存在个元素的和恰好等于给定整数k,否则就不存在。代码如下: ```c #include <stdio.h> #include <stdlib.h> #define TABLE_SIZE 1000001 // 哈希表大小 struct node { int key; int val; struct node* next; }; struct hash_table { struct node** table; int size; }; // 创建哈希表 struct hash_table* create_table(int size) { struct hash_table* htable = (struct hash_table*) malloc(sizeof(struct hash_table)); htable->table = (struct node**) malloc(sizeof(struct node*) * size); htable->size = size; // 初始化哈希表 for (int i = 0; i < size; i++) { htable->table[i] = NULL; } return htable; } // 哈希函数,使用取模运算 int hash(int key, int size) { return abs(key % size); } // 查找key在哈希表中的位置 struct node* lookup(struct hash_table* htable, int key) { int pos = hash(key, htable->size); struct node* cur = htable->table[pos]; while (cur != NULL && cur->key != key) { cur = cur->next; } return cur; } // 添加key-value对到哈希表中 void add(struct hash_table* htable, int key, int val) { int pos = hash(key, htable->size); struct node* cur = htable->table[pos]; while (cur != NULL && cur->key != key) { cur = cur->next; } if (cur == NULL) { cur = (struct node*) malloc(sizeof(struct node)); cur->key = key; cur->val = val; cur->next = htable->table[pos]; htable->table[pos] = cur; } } // 判断整数序列中是否存在个元素的和恰好等于给定整数k int has_sum(int* nums, int n, int k) { struct hash_table* htable = create_table(TABLE_SIZE); for (int i = 0; i < n; i++) { add(htable, nums[i], nums[i]); // 和键都是nums[i] } for (int i = 0; i < n; i++) { int complement = k - nums[i]; struct node* node = lookup(htable, complement); if (node != NULL && node->val != nums[i]) { return 1; // 存在个元素的和恰好等于k } } return 0; // 不存在 } // 测试程序 int main() { int nums[] = {1, 2, 3, 4, 5}; int n = sizeof(nums) / sizeof(int); int k = 7; if (has_sum(nums, n, k)) { printf("存在个元素的和恰好等于%d\n", k); } else { printf("不存在个元素的和恰好等于%d\n", k); } return 0; } ``` 当输入整数序列为{1, 2, 3, 4, 5},给定整数k为7时,上述程序输出“存在个元素的和恰好等于7”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值