167. 两数之和 II - 输入有序数组

image.png

  1. class Solution {
  2. public:
  3. vector<int> twoSum(vector<int> &numbers, int target) {
  4. int i = 0;
  5. int j = numbers.size() - 1;
  6. while (i < j) {
  7. int sum = numbers[i] + numbers[j];
  8. if (sum == target) {
  9. return {i + 1, j + 1};
  10. } else if (sum > target) {
  11. j--;
  12. } else {
  13. i++;
  14. }
  15. }
  16. return {};
  17. }
  18. };

633. 平方数之和

image.png

class Solution {
public:
    bool judgeSquareSum(int c) {
        long j = (int) sqrt(c);
        long i = 0;
        while (i <= j) {
            long sum = i * i + j * j;
            if (sum == c) {
                return true;
            } else if (sum > c) {
                j--;
            } else {
                i++;
            }
        }
        return false;
    }
};

345. 反转字符串中的元音字母

image.png

#define vowels(a)((a == 'a')||( a=='o')|| (a=='e')|| (a=='i')|| (a=='u')||(a == 'A')||( a=='O')|| (a=='E')|| (a=='I')|| (a=='U'))

class Solution {
public:
    string reverseVowels(string s) {
        if (s == "") {
            return s;
        }
        int size = s.length();
        for (int l = 0, r = size - 1; l <= r;) {
            while (l <= r && vowels(s[l]) == false) l++;
            while (l <= r && vowels(s[r]) == false) r--;
            if (l > r) {
                return s;
            }
            swap(s[l], s[r]);
            l++, r--;
        }
        return s;
    }
};

680. 验证回文字符串 Ⅱ

image.png

class Solution {
public:
    bool Judgehuiwen(int left, int right, string &str) {
        if (left == right) {
            return true;
        }
        while (left < right) {
            if (str[left] != str[right]) {
                return false;
                break;
            } else {
                left++;
                right--;
            }
        }
        return true;
    }

    bool validPalindrome(string s) {
        if (s.size() == 1) {
            return true;
        }
        int left = 0;
        int right = s.size() - 1;
        while (left < right) {
            if (s[left] != s[right]) {
                return (Judgehuiwen(left + 1, right, s)) || (Judgehuiwen(left, right - 1, s));
            } else {
                left++;
                right--;
            }
        }
        return true;
    }
};

//!!如果存在将光标点不同的字母和字符可以从左边或右边的游标被删除的情况下,你的算法将只检查从左侧删除。 如果回文是通过从右侧删除而形成的,则您的代码将丢失它。
因此,如果从左侧删除,则还需要检查是否可以从右侧删除,并且(可能)从左侧删除时检查是否没有回文。

88. 合并两个有序数组

image.png

class Solution {
public:
    void merge(vector<int> &nums1, int m, vector<int> &nums2, int n) {
        if (m == 0) {
            swap(nums1, nums2);
            return;
        }
        int a = m - 1;
        int b = n - 1;
        int c = m + n - 1;
        while (a >= 0 && b >= 0) {
            nums1[c--] = (nums1[a] > nums2[b]) ? nums1[a--] : nums2[b--];
        }
        while (b >= 0) {
            nums1[c--] = nums2[b--];
        }
        return;
    }
};

455. 分发饼干

image.png

class Solution {
public:
    int findContentChildren(vector<int> &g, vector<int> &s) {
        if (g.empty() || s.empty()) {
            return 0;
        }
        int i = 0;
        int j = 0;
        int m = s.size();
        int n = g.size();
        int ans = 0;
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        while (i < n && j < m) {
            if (g[i] <= s[j]) {
                ans++;
                i++;
                j++;
            } else {
                j++;
            }
        }
        return ans;
    }
};

141. 环形链表

image.png

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (head == NULL) {
            return false;
        }
        ListNode *l1 = head;
        ListNode *l2 = head->next;
        while (l1 != NULL && l2->next != NULL && l2 != NULL) {
            if (l1 == l2) {
                return true;
            }
            l1 = l1->next;
            l2 = l2->next->next;
        }
        return false;
    }
};

524. 通过删除字母匹配到字典里最长单词

image.png

class Solution {
public:
    string findLongestWord(string s, vector <string> &d) {
        vector <string> a;
        for (auto x:d) {
            int j = 0;
            for (int i = 0; i < s.size(); i++) {
                if (s[i] == x[j]) j++;
            }
            if (j == x.size()) a.push_back(x);
        }
        sort(a.begin(), a.end(), [](auto a, auto b) {
            return a.size() > b.size() || a.size() == b.size() && a < b;
        });
        return a.size() > 0 ? a[0] : "";
    }
};

75. 颜色分类

image.png

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int p1=0,curr=0;
        int p2=nums.size()-1;
        while(curr<=p2)
        {
            if(nums[curr]==0)
            {
                swap(nums[curr++],nums[p1++]);
            }
            else if(nums[curr]==2)
            {
                swap(nums[curr],nums[p2--]);
            }
            else{
                curr++;
            }
        }
    }
};