leetcode轮回计划20180905

  1. 11 Container With Most Water
    int maxArea(vector<int>& height) {}
    题意:每个数字是一个隔板高度,数字的下标是隔板的位置,求哪两块隔板之间能够盛放最多的水。
    思路:双指针法,哪个指针低哪个移动。
  2. 12 Integer to Roman
    string intToRoman(int num) {}
    将数字转化为罗马数字
    思路:对于这种情况不多的,可以将所有情况全部罗列出来
  3. 13 Roman to Integer
  4. 14 Longest Common Prefix
    string longestCommonPrefix(vector<string>& strs) {}
    思路:strs[0].find(tmp)
    其实使用最朴素的想法就可以了
  5. 15 3Sum(3)
    vector<vector<int>> threeSum(vector<int>& nums) {}
    题意:找到所有和恰好等于零的三元组
    思路:双指针法。注意可能存在相等的数字。
    教训:这个题目看似简单,其中有许多耐人寻味的地方。双指针发的应用方式也是需要记住的东西。
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ret;
        sort(nums.begin(), nums.end());
        int size = nums.size();
        for(int i = 0;i < size;){
            int begin = i + 1, end = size - 1;
            while(begin < end){
                if(nums[begin] + nums[end] + nums[i] == 0){
                    ret.push_back({nums[begin++], nums[i], nums[end--]});
                    while(begin < end && nums[begin] == nums[begin - 1]) begin ++;
                    while(begin < end && nums[end] == nums[end + 1]) end --;
                }else if(nums[begin] + nums[end] + nums[i] < 0){
                    begin ++;
                    while(begin < end && nums[begin] == nums[begin - 1]) begin ++;
                }else{
                    end --;
                    while(begin < end && nums[end] == nums[end + 1]) end --;
                }
            }
            ++ i;
            while(i < size && nums[i - 1] == nums[i]) ++i;
        }
        return ret;
    }
};
  1. 16 3Sum Closest
    int threeSumClosest(vector<int>& nums, int target) {}
    题意:和最接近target的三元组
    思路:双指针法。不用考虑相等的数字。
  2. 17 Letter Combinations of a Phone Number
    vector<string> letterCombinations(string digits) {}
    题意:给出数字组合,返回这个数字组合可能想要表达的字母组合(手机按键)
    思路:回溯
  3. 18 4Sum
    vector<vector<int>> fourSum(vector<int>& nums, int target) {}
    思路:四指针法(将两个指针固定的双指针法)
  4. 19 Remove Nth Node From End of List
    ListNode* removeNthFromEnd(ListNode* head, int n) {}
    题意:删除倒数第n个节点
    思路:双指针法
  5. 20 Valid Parentheses
    bool isValid(string s) {}
    思路:左括号压栈右括号,右括号出栈来比较
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 6,632评论 0 3
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,355评论 0 33
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 7,174评论 0 1
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,181评论 2 36
  • 路过八年未踏进的母校 趁着别人的家长会 溜进那个充满回忆的地方 那儿的篮球场有着不停的突破投篮防守的身影 那儿的走...
    施达锋阅读 1,711评论 0 1

友情链接更多精彩内容