Week 3算法分析作业
来源:互联网 发布:数据库的存储原理 编辑:程序博客网 时间:2024/06/15 06:16
Week 3算法分析作业
LeetCode题目 268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
给定一个n维的数组,数组中的每个元素在0到n之间,且互不相同,找出数组中缺少的数字
例如nums=[0,1,3],则缺少2
我的解法
对数组元素求和,由于每个数都在0到n之间,且互不相同,故对0到n求和后,两和相减则得到对应缺少的数字,复杂度为O(2N)
int missingNumber(vector<int>& nums) { int sum = 0; int len = 0; for(int num : nums){ sum += num; len++; } return ((len+1)*len)/2 - sum; }
学习到的解法
解法一:二叉搜索
原理:
首先调用排序算法,对数组从小到大排序
然后使用二叉搜索找到左子树不小于右子树时
返回左子树
代码:
public int missingNumber(int[] nums) { //binary search Arrays.sort(nums); int left = 0, mid= (left + right)/2; while(left<right){ mid = (left + right)/2; if(nums[mid]>mid) right = mid; else left = mid+1; } return left;}
解法二:位运算
原理:
基于a^b^b =a的结论,对整个数组做一次扫描,不断的异或操作,若不存在缺失数字,则nums[index]=index一直成立,知道遇到缺失数字,则返回index
代码:
int missingNumber(int[] nums) { //xor int res = nums.length; for(int i=0; i<nums.length; i++){ res ^= i; res ^= nums[i]; } return res;}
感想:
这道题最直观的解法就是求和作差,很容易想到,而且复杂度很低
其次二叉搜索的算法挺难理解的(主要是对二叉搜索的过程比较模糊)
而位运算的算法比较难想到(也好难理解噢=_=),挺巧妙的
阅读全文
0 0
- Week 3算法分析作业
- Week 2算法分析作业
- Week 4算法分析作业
- Week 5算法分析作业
- Week 6算法分析作业
- Week 7算法分析作业
- Week 8算法分析作业
- Week 9算法分析作业
- Week 10算法分析作业
- Week 11算法分析作业
- Week 12算法分析作业
- Week 13算法分析作业
- 《算法分析与设计》Week 3
- 算法设计与分析 - Week 3 分治策略
- Week 1 Analysis of Algorithm(算法分析)
- 《算法分析与设计》Week 1
- 《算法分析与设计》Week 2
- 《算法分析与设计》Week 6
- 大端小端与LSB和MSB的小故事
- 修改浏览器User-Agent
- 泛型
- Java-猴子分桃
- 对python文件方法open的探究
- Week 3算法分析作业
- JavaScript事件处理的方式(三种)
- 一套实用的事件监听系统
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L. The Heaviest Non-decreasing Subsequence Problem
- 高级软件工程实验报告(第二次实验)
- AIM Tech Round 4 (Div. 2) B, C 题解
- 深入理解乐观锁与悲观锁(实战)
- CNN卷积层相关计算公式
- 南阳理工OJ73