LeetCode Learning 1
来源:互联网 发布:sas聚类分析共现矩阵 编辑:程序博客网 时间:2024/05/22 06:37
第一次在林老师推荐的LeetCode这个网站上做题。先挑了通过率比较高的简单题和中等题来尝试。
首先第一题是283.Move Zeroes。这是一道难度为Easy的题,只需要把一个数组中的0都移到最后,其它数字的顺序不变,而且题目还有一个要求是只用当前数组进行变换而不能copy一个新的数组来操作。我的解决方法就是从后往前找0,找到以后把后边的数都向前挪一位,再把0放到最后。代码如下:
class Solution {public: void moveZeroes(vector<int>& nums) { int noz = 0;for (int i = nums.size() - 2; i != -1; i--){if (nums[i] == 0){for (int j = i; j<nums.size() - 1 - noz; j++){nums[j] = nums[j + 1];}nums[nums.size() - 1 - noz] = 0;noz++;}} }};第二题是167.Two SumⅡ。难度为Medium。给定一个排好序的整数数组和一个目标整数,找出数组中2个整数的和为目标整数,输出那2个数的位置。题目已经设定每样例只有一个解。如果数组没有排序则需要把每对整数进行检验,这样会是O(n^2)的复杂度,一开始我没有注意已经排序,用了这个算法发现超时。排好序的话可以先确定一个x1,然后用二分查找去查找x2=(目标-x1)。这样就能达到O(N logN)的复杂度。代码如下:
class Solution {public:vector<int> twoSum(vector<int>& numbers, int target) {int ns = numbers.size();vector<int> res;for (int i = 0; i<ns&&numbers[i] <= target / 2; i++){int l = i + 1, r = ns - 1, j, ta = target - numbers[i];while (l <= r){j = l + (r - l) / 2;if (ta < numbers[j])r = j - 1;else if (ta > numbers[j])l = j+1;else {res.push_back(i+1);res.push_back(j+1);return res;}}}return res;}};
0 0
- LeetCode Learning 1
- LeetCode Learning 2
- LeetCode Learning 3
- LeetCode Learning 4
- LeetCode Learning 5
- LeetCode Learning 6
- LeetCode Learning 7
- LeetCode Learning 8
- 【Deep Learning启始篇-1】:Connectionist Learning Procedure
- machine learning pre-learning (AI dairy 1)
- 1-1 C++ learning
- Learning boost 1 Serialization
- Learning Spirit 1
- Learning Spirit 1
- Direct3D learning (1)
- C++ Learning (1)
- J2ME learning! NO.1
- Hadoop Learning (1)
- java基础知识点
- 为什么32位机器最大只能用到4GB内存
- SpringMVC之后台接收参数与前台传递数据
- hdfs 机架感知
- C#中的泛型
- LeetCode Learning 1
- 数据源,连接池,数据库连接之间的关系
- cocos2d-android - 1.地图动态加载原理(世界地图的实现)
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- Android工具类--网络相关类
- servlet请求表单数据(一)
- leetcode无向图的复制之搜索
- 玩转四旋翼无人机(攒机基础1)
- Java创建线程的一种方法