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

算法刷题-2025年03月01日

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class test_02_28 {
    //长度最小的子数组 找出总和大于等于target的长度最小的子数组
    //target = 7, nums = [2,3,1,2,4,3] [1.2.2.3.3.4]
    public static int test1(int[] nums, int target){
        //存储结果
        List<Integer> res = new ArrayList<>();

        Arrays.sort(nums);
        int sum = 0;
        for (int i=nums.length-1;i>=0;i--){
            if (sum>=target){
                return res.size();
            }else{
                res.add(nums[i]);
            }
            sum+=nums[i];
        }
        return 0;
    }

    //长度最小的子数组-要连续
    //[2,3,1,2,4,3] 7
    //滑动窗口解法
    public static int test2(int[] nums, int target){
        int i=0;
        int j=0;
        int n=nums.length;
        int sum=0;
        int res = n+1;
        while (j<n&&i<n){
            sum+=nums[j];
            //发现累加数小于 target 将j往右走 寻求累加
            if (sum<target){
                j++;
            }else {
                //发现累加数大于等于target 此时要考虑左边的i能不能往右边移动
                if (sum - nums[i] < target) {

                    System.out.println(res);
                    //不可以移动
                    //获取此时的值和原来的值做比较
                    res = Math.min(j - i + 1, res);
                }
                //继续下一轮
                sum = sum - nums[i];
                i++;
                j++;
            }
        }
        if (res==n+1){
            return 0;
        }else{
            return j-i+1;
        }
    }

    //长度最小的子数组 找出一个数组中值最大但是长度最小的子数组
    public static void test3(int[] arr, int target){
        int n = arr.length;
        //j用来一直往前走
        int j=0;
        int i=0;
        //存储最大值
        int max=0;
        //结果
        int res = n+1;
        //开始循环
        while (j<n){
            //找出
            if (max+arr[j]>=target){
                res=Math.min(res,j-i+1);
                System.out.println(res);
                //将其加上来
                if (max+arr[j]-arr[i]>=target){
                    max=max-arr[i];
                    i++;
                }else{
                    j++;
                }
            }else{
                max=max+arr[j];
                j++;
            }
        }
        System.out.println(res);
    }
    public static int test4(int[] arr, int target){
        int n=arr.length;
        int i=0;
        int j=0;
        int res = n+1;
        int max=0;
        while (j<n){
            max=max+arr[j];
            //获取结果
            while (i<=j&&max>=target){
                res=Math.min(res,j-i+1);
                max=max-arr[i];
                i++;
            }
            j++;
        }
        if (res==n+1){
            return 0;
        }else{
            return res;
        }
    }
    
    
    public static void main(String[] args) {
        test4(new int[]{1,2,3,4,5,6,7}, 7);
    }
}

相关文章:

  • C语言复习2:键盘录入,字符串变量定义,流程控制语句
  • Redis 实战篇 ——《黑马点评》(下)
  • 【硬核拆解】DeepSeek开源周五连击:中国AI底层技术的“破壁之战”
  • Transformer 代码剖析7 - 词元嵌入(TokenEmbedding) (pytorch实现)
  • 【wordpress】服务器已有LNMP环境(已运行WordPress),如何配置文档访问功能?
  • 【笔记】用大预言模型构建专家系统
  • DeepSeek模型本地部署与应用构建
  • C++ Primer Plus第九章课后习题总结
  • 全星研发项目管理APQP软件系统:铸造芯片集成电路产业研发体系化建设平台
  • C++中的“结界”机制:作用域与变量可见性探秘
  • 【前端面试】如何不通过正则:验证IP地址合法性
  • PartitionFinder2 安装与使用-bioinfomatics tools 051
  • 从源到目标:深度学习中的迁移学习与领域自适应实践
  • 谈谈单例模式中通过Htools包的SpringUtil.getBean获取Bean的好处
  • 探索DEHP与睾酮素的隐秘关联
  • 【免费压测靶场开放】性能测试练习靶场,GET/POST双模式支持
  • SpringMVC学习(初识与复习Web程序的工作流程)(1)
  • 系统架构设计师—计算机基础篇—存储管理
  • Vim 常用快捷键大全:跳转、编辑、查找替换全解析
  • 【前端知识】Vue2.x与3.x之间的区别以及升级过程需要关注的地方
  • 个人备案的网站 做企业站/天眼查企业查询
  • 手机开发商/上海百度搜索排名优化
  • 山西省建设监理协会网站/百度快照优化推广
  • php网站开发费用/石家庄seo排名公司
  • 网站靠什么/制作网站建设入门
  • 成都网站设计报价/网络信息发布平台