当前位置: 首页 > news >正文

代码随想录day2 数组总结

1.二分查找

2.快慢 双指针

代码随想录day1-CSDN博客

3.滑动窗口

滑动窗口就是有一个起始位置,一个终止位置,通过调节起始位置和终止位置得到我们想要的结果。

外面一层for循环    用来更新终止位置   不满足条件 终止位置右移

里面一层while循环  用来更新起始位置   满足条件 起始位置右移

209. 长度最小的子数组 - 力扣(LeetCode)

int minSubArrayLen(int target, vector<int>& nums) {
        int i = 0;
        int reslut = 100001;
        int subL = 0;
        int sum = 0;

        for(int j = 0; j < nums.size(); j++){
            sum += nums[j];
            while(sum >= target){
                subL = j - i + 1;
                reslut = min(reslut, subL);
                sum -= nums[i];
                i++;
            }
        }
        if(reslut == 100001)return 0;
        else return reslut;
    }

904. 水果成篮 - 力扣(LeetCode)

int totalFruit(vector<int>& fruits) {
        int i = 0;
        int result = 0;

        unordered_map<int, int> kind; //记录水果种类数

        for(int j = 0; j < fruits.size(); j++){
            kind[fruits[j]]++;

            while(kind.size() > 2){
                kind[fruits[i]]--;
                if(kind[fruits[i]] == 0){
                    kind.erase(fruits[i]); //如果某种水果数量等于0,从哈希表中移除
                }
                i++;
            }

            result = max(result, j - i + 1);
        }

        return result;
    }

76. 最小覆盖子串 - 力扣(LeetCode)

string minWindow(string s, string t) {
        if(s.empty() || t.empty() || s.size() < t.size())return "";
        
        int result = INT_MAX;
        int i = 0;

        unordered_map<char, int>t_count;
        unordered_map<char, int> window_count;

        for(int j = 0; j < t.size(); j++){
            t_count[t[j]]++;
            
        }

        int num = 0;
        int left = 0;
        for(int j = 0; j < s.size(); j++){
            window_count[s[j]]++;
            if(window_count[s[j]] == t_count[s[j]]){
                num++;
            }

            while(num == t_count.size()){
                int temp = j - i + 1;
                if(temp < result){
                    result = temp;
                    left = i;
                }
                if(t_count.find(s[i]) != t_count.end()){
                    if(window_count[s[i]] == t_count[s[i]]){
                        num--;
                    }//本来有可能大于或等于
                    window_count[s[i]]--;
                }
                i++;
            }
        }

        return result == INT_MAX ? "":s.substr(left, result);
    }

4.螺旋矩阵模拟

左闭右开,循环模拟

59. 螺旋矩阵 II - 力扣(LeetCode)

vector<vector<int>> generateMatrix(int n) {
        int starx = 0, stary = 0;
        int offset = 1;
        vector<vector<int>> re(n, vector<int>(n,0));
        int count = 1;
        int i, j;

        while(offset <= n/2){
            i = starx;
            j = stary;
            for(; j < n - offset; j++){
                re[i][j] = count++;
            }
            for(; i < n - offset; i++){
                re[i][j] = count++;
            }
            for(; j > stary; j--){
                re[i][j] = count++;
            }
            for(; i > starx; i--){
                re[i][j] = count++;
            }
            offset++;
            starx++;
            stary++;
        }
        if(n % 2 != 0)re[n/2][n/2] = count;

        return re;
    }

 54. 螺旋矩阵 - 力扣(LeetCode)

vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size() == 0)return {};

        vector<int> re; 
        int starx = 0, stary = 0;
        int w = matrix[0].size();
        int h = matrix.size();
        int i, j;

        int offset = 1;

        while(offset <= min(w,h)/2){
            i = starx;
            j = stary;
            for(; j < w - offset; j++){
                re.push_back(matrix[i][j]);
            }
            for(;i < h - offset; i++){
                re.push_back(matrix[i][j]);
            }
            for(; j > stary; j--){
                re.push_back(matrix[i][j]);
            }
            for(; i > starx; i--){
                re.push_back(matrix[i][j]);
            }
            offset++;
            starx++;
            stary++;
        }
        if(h % 2 != 0 && w >= h){
            int offset = h/2;
            for(int j = offset; j < w - offset; j++){
                re.push_back(matrix[offset][j]);
            }
        }else if(w % 2 != 0 && w < h){
            int offset = w/2;
            for(int i = offset; i < h - offset; i++){
                re.push_back(matrix[i][offset]);
            }
        }

        return re;
    }

5.区间和

把前缀和保存起来后面直接用

58. 区间和(第九期模拟笔试)

#include<iostream>
#include<vector>
using namespace std;

int main(){
    int n, a, b;
    cin >> n;
    int re = 0;

    vector<int> vec(n);
    vector<int> sum(n);   // 前缀和

    for(int i = 0; i < n; i++){
        int t;
        cin >> t;

        vec[i] = t;
        if(i == 0)sum[i] = t;
        else sum[i] = t + sum[i-1];
    }

    while(cin >> a >> b){
        if(a == 0)re = sum[b];
        else re = sum[b] - sum[a-1];
        cout << re << endl;
    }

}

44. 开发商购买土地(第五期模拟笔试)

#include<iostream>
#include<vector>
#include <climits>
using namespace std;

int main(){
    int n, m;
    cin >> n >> m;
    int sum = 0;

    vector<vector<int>> vec(n, vector<int>(m, 0));
    vector<int> w(n, 0);  //横向
    vector<int> h(m, 0);  //纵向

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            int t = 0;
            cin >> vec[i][j];
            sum += vec[i][j];
            w[i] += vec[i][j];
        }
    }

    for(int j = 0; j < m; j++){
        for(int i = 0; i < n; i++){
            h[j] += vec[i][j];
        }
    }

    int result = INT_MAX;
    int t = 0;
    
    for(int i  = 0; i < n; i++){
        t += w[i];
        result = min(result, abs(sum - t - t));
    }

    t = 0;
    for(int j = 0; j < m; j++){
        t += h[j];
        result = min(result, abs(sum - t - t));
    }

    cout << result << endl;
}
http://www.dtcms.com/a/99569.html

相关文章:

  • 03-SpringBoot3入门-配置文件(自定义配置及读取)
  • Centos 7 搭建 jumpserver 堡垒机
  • Nginx 解决具有不安全、不正确或缺少 SameSite 属性的 Cookie方案
  • IPD流程:科技企业IPD流程培训稿
  • 独立站系统:架构设计、功能实现与用户界面优化
  • 【项目合集】只能xx养殖系统,STM32、esp8266、OLED屏幕、dht11、光敏、水位、加热、风扇
  • STL性能优化实战:如何让C++程序畅快运行
  • 从代码学习数值优化算法 - 分片McCormick放松方法Python版
  • 如何使用postman调用多参数接口(包含文件上传)
  • C++ 中std::vector<T>清除方式
  • win32汇编环境,网络编程入门之十六
  • Reidis介绍
  • 收集的一些问题?
  • SolidJS 深度解析:高性能响应式前端框架
  • 基于SpringBoot的求职招聘网站系统(源码+数据库)
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望
  • 排序算法1--插入排序
  • 策略模式_行为型_GOF23
  • 深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例
  • AWE 2025:当AI科技遇见智能家居
  • 请描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
  • Java面向对象一篇通:从类与对象到Lambda(万字详解)
  • github免费编程类工具汇总与评估(二)
  • 2025年最新自动化/控制保研夏令营预推免面试真题分享(东南/浙大/华科清华)
  • mysql.8.4.4--初始化报错--libnuma.so.1缺失
  • Windows学习笔记(5)
  • Numpy进行数组函数操作
  • 鸿蒙项目源码-记账本app个人财物管理-原创!原创!原创!
  • 自动化发布工具CI/CD实践Jenkins介绍!
  • 动态规划--线性规划