• Leetcode array 704 27 189 121 380 238 134 13


    review:

    704. Binary Search

    1. class Solution {
    2. public:
    3. int search(vector<int>& nums, int target) {
    4. int left = 0, right = nums.size()-1;
    5. while(left <= right){
    6. int mid = left + (right-left)/2;
    7. if(nums[mid] == target) return mid;
    8. else if(nums[mid] > target){
    9. right = mid-1;
    10. }else{
    11. left = mid+1;
    12. }
    13. }
    14. return -1;
    15. }
    16. };

    二分搜索

    判断条件是left 和 right

    这里就要注意区间开闭的问题

    27. Remove Element

    1. class Solution {
    2. public:
    3. int removeElement(vector<int>& nums, int val) {
    4. int slow = 0, fast = 0;
    5. while(fast < nums.size()){
    6. if(nums[fast] != val){
    7. nums[slow] = nums[fast];
    8. slow++;
    9. }
    10. fast++;
    11. }
    12. return slow;
    13. }
    14. };

    189. Rotate Array

    1. class Solution {
    2. public:
    3. void rotate(vector<int>& nums, int k) {
    4. int n = nums.size();
    5. reverse(nums.begin(), nums.end());
    6. reverse(nums.begin(), nums.begin()+k%n);
    7. reverse(nums.begin()+k%n, nums.end());
    8. }
    9. };

    121. Best Time to Buy and Sell Stock

    1. class Solution {
    2. public:
    3. int maxProfit(vector<int>& prices) {
    4. vectorint>> dp(prices.size(), vector<int>(2));
    5. //0表示未持有, 1表示持有
    6. dp[0][0] = 0;
    7. dp[0][1] = -prices[0];
    8. int maxVal = 0;
    9. for(int i=1; isize(); i++){
    10. dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
    11. dp[i][1] = max(dp[i-1][1], -prices[i]);
    12. }
    13. return dp[prices.size()-1][0];
    14. }
    15. };

    New:

    380. Insert Delete GetRandom O(1)

    1. class RandomizedSet {
    2. private:
    3. vector<int> nums;
    4. unordered_map<int, int> valToIndex;//nums中每个元素在nums的下表
    5. public:
    6. RandomizedSet() {
    7. }
    8. bool insert(int val) {
    9. if(valToIndex.find(val) != valToIndex.end()){
    10. return false;
    11. }
    12. valToIndex[val] = nums.size();
    13. nums.push_back(val);
    14. return true;
    15. }
    16. bool remove(int val) {
    17. if(valToIndex.find(val) == valToIndex.end()) return false;
    18. int lastNum = nums.back();
    19. int index = valToIndex[val];
    20. valToIndex[lastNum] = index;
    21. swap(nums[index], nums.back());
    22. nums.pop_back();
    23. valToIndex.erase(val);
    24. return true;
    25. }
    26. int getRandom() {
    27. if(nums.size() == 0) return false;
    28. return nums[rand() % nums.size()];
    29. }
    30. };

    因为需要运行时间时O(1),所以要加上map

    删除的时候要把需要删除的变到最后,再直接pop掉

    rand用法:

    1.rand()

    2. nums[rand() % nums.size()];

    3. left+rand() % (right-left)

    238. Product of Array Except Self

    1. class Solution {
    2. public:
    3. vector<int> productExceptSelf(vector<int>& nums) {
    4. int n = nums.size();
    5. vector<int> presuf(n, nums[0]);
    6. for(int i=1; isize(); i++){
    7. presuf[i] = presuf[i-1] * nums[i];
    8. }
    9. vector<int> postsuf(n, nums[n-1]);
    10. for(int i=n-2; i>=0; i--){
    11. postsuf[i] = postsuf[i+1] * nums[i];
    12. }
    13. vector<int> res(n);
    14. res[0] = postsuf[1];
    15. res[n-1] = presuf[n-2];
    16. for(int i=1; i-1; i++){
    17. res[i] = presuf[i-1] * postsuf[i+1];
    18. }
    19. return res;
    20. }
    21. };

    134. Gas Station

    1. class Solution {
    2. public:
    3. int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    4. int sum = 0, minSum = 0;
    5. int start = 0;
    6. for(int i=0; isize(); i++){
    7. sum += gas[i] - cost[i];
    8. if(sum < minSum){
    9. minSum = sum;
    10. start = i+1;
    11. }
    12. }
    13. if(sum < 0) return -1;
    14. return start == gas.size() ? 0 : start;
    15. }
    16. };
    1. class Solution {
    2. public:
    3. int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    4. int sum = 0;
    5. int start = 0;
    6. for(int i=0; isize(); i++){
    7. sum += gas[i] - cost[i];
    8. }
    9. if(sum < 0) return -1;
    10. int tank = 0;
    11. for(int i=0; isize(); i++){
    12. tank += gas[i] - cost[i];
    13. if(tank < 0){
    14. start = i+1;
    15. tank = 0;
    16. }
    17. }
    18. return start == gas.size() ? 0 : start;
    19. }
    20. };

    13. Roman to Integer

    1. class Solution {
    2. public:
    3. int romanToInt(string s) {
    4. unordered_map<char, int> map;
    5. map['I'] = 1;
    6. map['V'] = 5;
    7. map['X'] = 10;
    8. map['L'] = 50;
    9. map['C'] = 100;
    10. map['D'] = 500;
    11. map['M'] = 1000;
    12. int sum = 0;
    13. for(int i = 0; isize(); i++){
    14. int x = map[s[i+1]];
    15. if(map[s[i]] < map[s[i+1]]){
    16. sum -= map[s[i]];
    17. }else{
    18. sum += map[s[i]];
    19. }
    20. }
    21. return sum;
    22. }
    23. };

  • 相关阅读:
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    C#/.NET/.NET Core优秀项目和框架2024年1月简报
    Windows一键启动所需要的软件脚本
    Prometheus 监控指南:如何可靠地记录数字时间序列数据
    download文件电脑上如何打开
    小林coding图解计算机网络|基础篇01|TCP/IP网络模型有哪几层?
    node.js 解析post请求 方法一
    Jupyter Notebook简介
    解决vulhub漏洞环境下载慢卡死问题即解决docker-valhub漏洞环境下载慢的问题
    11.9 leetcode打卡
  • 原文地址:https://blog.csdn.net/Zoeyii/article/details/132701390