当前位置: 首页 > news >正文

网站建好怎么发布龙岩天宫山住宿

网站建好怎么发布,龙岩天宫山住宿,获取整个网站源码工具,网络舆情监测机制两数之和 两数之和1 思路一 (简单突破)2 思路二 (进行优化)3 思路三 (哈希表 我还不会) 谢谢阅读Thanks♪(・ω・)ノ下一篇文章见!!! 两数…

在这里插入图片描述

两数之和

  • 两数之和
    • 1 思路一 (简单突破)
    • 2 思路二 (进行优化)
    • 3 思路三 (哈希表 我还不会)
  • 谢谢阅读Thanks♪(・ω・)ノ
  • 下一篇文章见!!!

两数之和

题目链接

在这里插入图片描述

1 思路一 (简单突破)

最简单的思想: 遍历 从头开始逐个遍历。
首先选定 加数1 然后寻找 加数2 ,如果两者之和满足条件 target 。返回相应下标即可!

int* twoSum(int* nums, int n, int target, int* returnSize) {for(int i = 0;i < n;i++){//加数1 从头开始for(int j = i + 1;j < n;j++){//加数2 从加数1 后一位开始if(nums[i]+nums[j] == target){//满足条件即可返回对应下标int* a = (int*)malloc(2*sizeof(int)) ;a[0] = i;a[1] = j;//返回的数组大小*returnSize = 2;//返回数组return a;}}}//如果全不满足 返回NULL*returnSize = 0;return NULL;
}

提交! 过啦!!!
在这里插入图片描述

但是看看运算时间,居然这么慢!确实咱们的算法时间复杂度是O(n^2),不够快速。
才打败了 69% 的用户。我们不能满足当下,让我们思考有没有其他思路。

2 思路二 (进行优化)

  1. 仔细想想,上面的遍历属实比较费时间,那我们如何改进它呢?
  2. 我的想法是从选择数上下手,取消逐个遍历,改用 二分查找
  3. 二分查找的效率比逐个遍历快许多。但是进行二分查找 的前提是 数组有序!
  4. 如果我们进行简单的排序,那数组下标就被打乱了,无法返回正确值。
  5. 所以我们有必要创建一个新数组,而且是二维数组,储存值和对应下标
  6. 然后不断将和与target 比较,进行二分查找,即可。
//qsort 的比较函数 注意我们传的数据类型是 int* 
static int  compare(int* n1 , int* n2){return n1[0] - n2[0] ;}
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int n = numsSize;int arr[n][2]; // 分别储存下标和值大小 保证同时移动// 将原数组的值以及它对应的下标存入临时数组中for (int i = 0; i < n; i++) { arr[i][0] = nums[i]; // 值arr[i][1] = i; // 该值对应的下标}//排序qsort(arr,n,sizeof(arr[0]),compare);//二分寻找for(int i = 0; i < n;i++){int left = 0 ,right = n-1;//区间[0 , n-1]while(left <= right){int mid = (left + right) / 2;//区间中点//检查是否和为target 并且 两数下标不能相同(否则就是同一个数)if(arr[mid][0] + nums[i] == target && i != arr[mid][1] ){*returnSize = 2 ; //两个数//开辟两个int类型的空间int* ret = (int*)malloc(sizeof(int)*2); //记录两个数下标ret[0] = i;ret[1] = arr[mid][1];return ret;}//如果大于target 则在小区间寻找else if(arr[mid][0] + nums[i] > target){right = mid-1;}//如果小于target 则在大区间寻找else {left = mid + 1;}}}//没有找到*returnSize = 0;return NULL;}

提交! 过啦!!!!!!!
在这里插入图片描述
这下子打败了98%的用户。我们从 120 ms 一下子来到 8 ms。
时间复杂度来到O(nlogn).
简直就是飞机和马车的差距
那么问题来到为什么还有 2% 比我们快????????
我看了大佬们的代码,使用到了哈希表 而我现在还不会!哭了。
o(╥﹏╥)oo(╥﹏╥)o!o(╥﹏╥)oo(╥﹏╥)o!o(╥﹏╥)oo(╥﹏╥)o!

3 思路三 (哈希表 我还不会)

下面给大家看一下大佬的 0 ms 的代码。

#define HashSize 107 // 哈希表大小typedef struct Node { // 哈希结点int value; // 值int index; // 下标struct Node* next; // 下指针
}Node;int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int n = numsSize; // 数组长度Node* hash[HashSize]; // 哈希表for (int i = 0; i < HashSize; i++) { // 初始化哈希表hash[i] = (Node*)malloc(sizeof(Node));hash[i]->value = hash[i]->index = -1;hash[i]->next = NULL;}for (int i = 0; i < n; i++) { // 遍历一遍原数组int pos = abs(target - nums[i]) % HashSize; // 找到target - nums[i]在哈希表中对应的位置Node* head = hash[pos];while (head->next && head->next->value != target - nums[i]) head = head->next; // 找该位置是否有target - nums[i]这个值if (head->next) { // 找到符合题意的值*returnSize = 2;int* ans = (int*)malloc(sizeof(int) * 2);ans[0] = i; ans[1] = head->next->index; // 写入答案for (int i = 0; i < HashSize; i++) free(hash[i]);return ans;}pos = abs(nums[i]) % HashSize; // 找到nums[i]在哈希表中对应的位置head = hash[pos];while (head->next) head = head->next; // 写在这个位置的末尾head->next = (Node*)malloc(sizeof(Node));head->next->value = nums[i]; // 写入该值head->next->index = i; // 写入该值对应的下标head->next->next = NULL;}for (int i = 0; i < HashSize; i++) free(hash[i]);*returnSize = 0;return NULL;
}作者:星开祈灵
链接:https://leetcode.cn/problems/two-sum/solutions/2326455/1-liang-shu-zhi-he-by-xing-kai-qi-ling-vxt6/
来源:力扣(LeetCode)
著作权归作者所有。

C语言的缺陷 , 需要手撕哈希表。
来看大佬 C++ 的代码,真的非常美观!!!!
美!!!! 帅!!!! 炸裂!!!!

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器bfor(int i=0;i<nums.size();i++){if(a.count(target-nums[i])>0){b[0]=a[target-nums[i]];b[1]=i;break;}a[nums[i]]=i;//反过来放入map中,用来获取结果下标}return b;};
};作者:陈乐乐
链接:https://leetcode.cn/problems/two-sum/solutions/4361/liang-shu-zhi-he-by-gpe3dbjds1/
来源:力扣(LeetCode)
著作权归作者所有。

谢谢阅读Thanks♪(・ω・)ノ

下一篇文章见!!!

http://www.yayakq.cn/news/401357/

相关文章:

  • 手机能看的你们知道的拼多多seo怎么优化
  • 公司建设网站的手续上海人才网官网招聘招聘
  • 网站设计的宽度开源影视cms系统
  • wordpress建站需要多久网站开发nodejs
  • 郑州企业建设网站有什么好处遵义市 网站建设
  • 麦包包网站建设的特点wordpress新浪微博主题
  • 怎么拥有网站的所有权wordpress 被墙
  • 做网站 设计师很同个网站可以做多个外链吗
  • 大连建设工业产品网站淘宝联盟返利网站怎么做
  • 平面设计欣赏网站推荐网页设计基础实践课笔试题
  • 哪个网站专做二手相机网站建设流程讯息
  • 泰安诚信的企业建站公司成品网站1688入口
  • 做神马网站优化快网站建设的市场规模
  • 国外做问卷网站好四川省人事考试网
  • 哪些网站可以免费申请做百度联盟用什么做网站
  • 微擎应用市场深圳的seo网站排名优化
  • 设计网站的方法平面设计广告设计
  • 个人网站的建设与管理wordpress 手机发布
  • 优秀网站共分享广州网站建设58
  • 个人主页网站模板免费公司网站被侵权
  • 深圳做网站比较手机无货源网店怎么开
  • 万网网站建设流程展厅布展方案设计
  • 哈尔滨精品网站制作网站设计制作一条龙多少钱
  • 义乌 网站建设今天深圳新增确诊最新消息
  • 小型网站开发时间周期安全员资格证书查询网
  • 湖北建设厅考试网站外贸网站设计多少钱
  • 国际网站建设的目的企业推广视频
  • 平板上做网站的软件企业网站相关案例
  • 创意互动网站哪里有wordpress的教程
  • 中文网站建设合同扬州城乡建设局网站