标签:疑问 越界 war api first sort vector 部分 情况
歧路亡羊是目前的很大敌人,故,统一处理,集中兵力成了我最重要的事情,但凡学习必须专注,否则宁可不学,只有投入和专注才能真正打赢这场仗
疑问:
1.sort函数的[]
优点:
1.从1开始回减,有效控制范围
class Solution { public: bool canAttendMeetings(vector<vector<int>>& intervals) { sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];}); for (int i = 1; i < intervals.size(); ++i) { if (intervals[i][0] < intervals[i - 1][1]) { return false; } } return true; } };
LC278
这道题最重要的是,终止条件的判别。避免陷入死循环。对mid的计算不能直接(left+right)/2,会导致左右太大时,越界,left+(right-left)/2则是一定不会越界的方法,非常好,值得肯定。
此外题干说尽量少用判别函数,所以判别函数虽然也可以决定是否终止,我们应该选择更好的判别方法
// Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { int left = 0, right = n; //[left, right] //用这种一定有界的循环,尽量少使用while 1这种情况,避免死循环超时 while (left <= right) { int mid = left + (right - left) / 2; //题干说尽量少使用判断的调用 if (isBadVersion(mid)) { right = mid - 1; } else { left = mid + 1; } } return left; } };
LC283
双指针法,优点:
指针是一种方法名称,并非必须得要指针,用下标一样作用,要领会精神
swap是在std空间的,可以大胆使用
疑问:
swap能交换什么种类的值
答疑:
大部分类型包括vector都可以直接交换
// swap algorithm example (C++98) #include <iostream> // std::cout #include <algorithm> // std::swap #include <vector> // std::vector int main () { int x=10, y=20; // x:10 y:20 std::swap(x,y); // x:20 y:10 std::vector<int> foo (4,x), bar (6,y); // foo:4x20 bar:6x10 std::swap(foo,bar); // foo:6x10 bar:4x20 std::cout << "foo contains:"; for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it) std::cout << ‘ ‘ << *it; std::cout << ‘\n‘; return 0; }
class Solution { public: void moveZeroes(vector<int>& nums) { for (int i = 0, j = 0; i < nums.size(); ++i) { if (nums[i]) { swap(nums[i], nums[j++]); } } } };
ps:vector的remove函数只是把后面的数字往前提,但是并不会把要去掉的数字向后挪
eg:1,0,2,0,3
remove(vec.begin(),vec.end(),0)
1,2,3,0,3
后面原来的东西是不变的
解法二虽然写着复杂但时空复杂度与1相似,自带函数比较快
class Solution { public: void moveZeroes(vector<int>& nums) { int n=nums.size(); // if(n==0) return; nums.erase(remove(nums.begin(),nums.end(),0),nums.end()); int n1=nums.size(); if(n1!=n) { vector<int> ad(n-n1,0); nums.insert(nums.end(),ad.begin(),ad.end()); } } };
标签:疑问 越界 war api first sort vector 部分 情况
原文地址:https://www.cnblogs.com/Marigolci/p/12272395.html