Java每日一练(20230507) 组合总和、缺失的正数、单词搜索II

news2024/9/25 11:19:33

目录

1. 组合总和  🌟🌟

2. 缺失的第一个正数  🌟🌟🌟

3. 单词搜索 II  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 组合总和

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。 

示例 1:

输入:candidates = [2,3,6,7], target = 7,
输出:[[7],[2,2,3]]

示例 2:

输入:candidates = [2,3,5], target = 8,
输出:[[2,2,2,2],[2,3,3],[3,5]]

提示:

  • 1 <= candidates.length <= 30
  • 1 <= candidates[i] <= 200
  • candidate 中的每个元素都是独一无二的。
  • 1 <= target <= 500

出处:

https://edu.csdn.net/practice/27223965

代码:

import java.util.*;
public class combinationSum {
    public static class Solution {
      public List<List<Integer>> combinationSum(int[] candiates, int target) {
        List<List<Integer>> resultList = new ArrayList<>();
        List<Integer> result = new ArrayList<>();
        Arrays.sort(candiates);
        dfs(candiates, resultList, result, 0, target);
        return resultList;
      }

      private void dfs(int[] candiates, List<List<Integer>> resultList, List<Integer> result, int start, int target) {
        if (target < 0) {
          return;
        } else if (target == 0) {
          resultList.add(new ArrayList<>(result));
        } else {
          for (int i = start; i < candiates.length; i++) {
            result.add(candiates[i]);
            dfs(candiates, resultList, result, i, target - candiates[i]);
            result.remove(result.size() - 1);
          }
        }
      }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] candidates = {2, 3, 6, 7};
        int target = 7;
        List<List<Integer>> res = s.combinationSum(candidates, target);
        System.out.println(res.toString());
        int[] candidates2 = {2, 3, 5};
        target = 8;
        res = s.combinationSum(candidates2, target);
        System.out.println(res.toString());
    }
}

输出:

[[2, 2, 3], [7]]
[[2, 2, 2, 2], [2, 3, 3], [3, 5]]


2. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?

示例 1:

输入:nums = [1,2,0]
输出:3

示例 2:

输入:nums = [3,4,-1,1]
输出:2

示例 3:

输入:nums = [7,8,9,11,12]
输出:1

提示:

  • 0 <= nums.length <= 300
  • -2^31 <= nums[i] <= 2^31 - 1

以下程序实现了这一功能,请你填补空白处内容:

```Java
class Solution {
    public int firstMissingPositive(int[] nums) {
        int n = nums.length;
        int contains = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] == 1) {
                contains++;
                break;
            }
        }
        if (contains == 0) {
            return 1;
        }
        for (int i = 0; i < n; i++) {
            _________________;
        }
        for (int i = 0; i < n; i++) {
            int a = Math.abs(nums[i]);
            nums[a - 1] = -Math.abs(nums[a - 1]);
        }
        for (int i = 0; i < n; i++) {
            if (nums[i] > 0) {
                return i + 1;
            }
        }
        return n + 1;
    }
}
```

出处:

https://edu.csdn.net/practice/27223966

代码:

import java.util.*;
public class firstMissingPositive {
    public static class Solution {
        public int firstMissingPositive(int[] nums) {
            int n = nums.length;
            int contains = 0;
            for (int i = 0; i < n; i++) {
                if (nums[i] == 1) {
                    contains++;
                    break;
                }
            }
            if (contains == 0) {
                return 1;
            }
            for (int i = 0; i < n; i++) {
                if ((nums[i] <= 0) || (nums[i] > n)) {
                    nums[i] = 1;
                }
            }
            for (int i = 0; i < n; i++) {
                int a = Math.abs(nums[i]);
                nums[a - 1] = -Math.abs(nums[a - 1]);
            }
            for (int i = 0; i < n; i++) {
                if (nums[i] > 0) {
                    return i + 1;
                }
            }
            return n + 1;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums = {1,2,0}; 
        System.out.println(s.firstMissingPositive(nums));
        int[] nums2 = {3,4,-1,1}; 
        System.out.println(s.firstMissingPositive(nums2));
        int[] nums3 = {7,8,9,11,12}; 
        System.out.println(s.firstMissingPositive(nums3));
    }
}

输出:

3
2
1


3. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。

单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例 1:

输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"]
输出:["eat","oath"]

示例 2:

输入:board = [["a","b"],["c","d"]], words = ["abcb"]
输出:[]

提示:

  • m == board.length
  • n == board[i].length
  • 1 <= m, n <= 12
  • board[i][j] 是一个小写英文字母
  • 1 <= words.length <= 3 * 104
  • 1 <= words[i].length <= 10
  • words[i] 由小写英文字母组成
  • words 中的所有字符串互不相同

出处:

https://edu.csdn.net/practice/27223967

代码:

import java.util.*;
public class findWords {
    public static class Solution {
        static int[][] d = new int[][] { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
        static Map<String, Boolean> notExistWords = new HashMap<>();
        public List<String> findWords(char[][] board, String[] words) {
            List<String> ans = new ArrayList<>();
            Arrays.sort(words);
            notExistWords.clear();
            for (int i = 0; i < words.length; i++) {
                String word = words[i];
                if (i > 0 && word.equals(words[i - 1]))
                    continue;
                boolean notExistFlag = false;
                for (int j = 1; j < word.length(); j++) {
                    if (notExistWords.containsKey(word.substring(0, j + 1))) {
                        notExistFlag = true;
                        break;
                    }
                }
                if (notExistFlag)
                    continue;
                if (exist(board, word)) {
                    ans.add(word);
                } else {
                    notExistWords.put(word, false);
                }
            }
            return ans;
        }
        public boolean exist(char[][] board, String word) {
            int m = board.length;
            if (m == 0)
                return false;
            int n = board[0].length;
            if (n == 0)
                return false;
            if (word.equals(""))
                return true;
            boolean[][] f = new boolean[m][n];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (word.charAt(0) == board[i][j]) {
                        f[i][j] = true;
                        boolean flag = dfs(i, j, 1, board, word, m, n, f);
                        if (flag)
                            return true;
                        f[i][j] = false;
                    }
                }
            }
            return false;
        }
        private boolean dfs(int i, int j, int k, char[][] board, String word, int m, int n, boolean[][] f) {
            if (k == word.length()) {
                return true;
            }
            for (int l = 0; l < 4; l++) {
                if (i + d[l][0] < m && j + d[l][1] < n && i + d[l][0] >= 0 && j + d[l][1] >= 0
                        && board[i + d[l][0]][j + d[l][1]] == word.charAt(k) && !f[i + d[l][0]][j + d[l][1]]) {
                    f[i + d[l][0]][j + d[l][1]] = true;
                    boolean flag = dfs(i + d[l][0], j + d[l][1], k + 1, board, word, m, n, f);
                    if (flag)
                        return true;
                    f[i + d[l][0]][j + d[l][1]] = false;
                }
            }
            return false;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        char[][] board1 = {
            {'o', 'a', 'a', 'n'},
            {'e', 't', 'a', 'e'},
            {'i', 'h', 'k', 'r'},
            {'i', 'f', 'l', 'v'}};
        String[] words1 = {"oath", "pea", "eat", "rain"};
        System.out.println(s.findWords(board1, words1));
        char[][] board2 = {{'a', 'b'}, {'c', 'd'}};
        String[] words2 = {"abcb"};
        System.out.println(s.findWords(board2, words2)); 
    }
}

输出:

[eat, oath]
[]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字化转型导师坚鹏:企业干部如何进行数字化转型

企业干部如何进行数字化转型 ——数字化转型背景下重塑企业干部核心竞争力 授课背景&#xff1a; 很多银行存在以下问题&#xff1a; 企业干部不知道如何进行数字化转型&#xff1f; 企业干部不清楚银行数字化能力模型的内涵&#xff1f; 企业干部不知道如何通过数字化…

总结843

学习目标&#xff1a; 5月&#xff08;张宇强化18讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 做记录本上3道题 学习内容&#xff1a; 暴力英语&#xff1a;回环诵读&#xff0c;继续背一篇阅读理解&…

前端实战项目:网易云静态页面——轮播图

前言 目前这个前端项目持续更新中~ 网易云静态页面——导航栏 Flex布局 文章目录 前言实现目标静态实现页面大致样子添加模糊的背景图添加图片下载客户端部分轮播图小圆点第一个小圆点变成红色以及当鼠标放上其他任一小圆点也变成红色左右按钮总代码 动态实现 实现目标 建立相…

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

Altera_Shift Register&#xff08;RAM-based&#xff09;ip核 前言1.创建mif文件&#xff0c;通过ROM ip核调用该mif文件1.1创建mif文件1.2顺序填充mif文件1.3创建ROM ip核调用mif文件 2.计数器读取mif文件中的数据2.1写一个0-15的循环计数器2.2实例化ROM ip核、调用计数器模块…

【C++学习】类和对象--多态

多态的基本语法 多态是C面向对象三大特性之一 静态多态&#xff1a; 函数重载和运算符重载属于静态多态&#xff0c;复用函数名&#xff08;函数地址早绑定&#xff0c;编译阶段确定函数地址&#xff09; 动态多态&#xff1a; 派生类和虚函数实现运行时多态&#xff08;函数地…

Python |浅谈爬虫的由来

本文概要 本篇文章主要介绍Python爬虫的由来以及过程&#xff0c;适合刚入门爬虫的同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; &#x1f31f;&#x1f31f;&#x1f31f;个人简介&#x1f31f;&…

快速搭建一个spring入门案例及整合日志

目录 环境要求 构建模块 程序开发 引入依赖 创建java类 创建配置文件 创建测试类测试 运行测试程序 程序分析 spring中配置启用Log4j2日志框架 Log4j2日志概述 引入Log4j2依赖 加入日志配置文件 测试 使用日志 环境要求 JDK&#xff1a;Java17&#xff08;Spring6要…

Linux高性能服务器编程|阅读笔记:第6章 - 高级I/O函数

目录 简介6.1 pipe函数6.2 dup函数和dup2函数6.3 readv函数和writev函数6.4 sendfile函数6.5 mmap函数和munmap函数6.6 splice函数6.7 tee函数6.8 fcntl函数结语 简介 Hello&#xff01; 非常感谢您阅读海轰的文章&#xff0c;倘若文中有错误的地方&#xff0c;欢迎您指出&…

10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

目录 1、基本使用1.1 方法一1.2 方法二 2、GitHub用户搜索案例 1、基本使用 1.1 方法一 ​ 在vue.config.js中添加如下配置&#xff1a; devServer:{proxy:"http://localhost:5000" }说明&#xff1a; 优点&#xff1a;配置简单&#xff0c;请求资源时直接发给前…

用三角函数解决几何问题

如图&#xff0c;在 △ A B C \triangle ABC △ABC 中&#xff0c; A C > 5 , A B > A C AC>5,AB>AC AC>5,AB>AC&#xff0c;点 E E E 是 A B AB AB 上一点&#xff0c;链接 C E CE CE&#xff0c;将 △ B C E \triangle BCE △BCE 沿 C E CE CE 折叠&…

【unity之数据持久化】-Unity公共类PlayerPrefs

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

FreeRTOS 内存管理

文章目录 一、FreeRTOS 内存管理简介二、 内存碎片三、heap_1 内存分配方法1. 分配方法简介2. 内存申请函数详解3. 内存释放函数详解 四、heap_2 内存分配方法1. 分配方法简介2. 内存块详解3. 内存堆初始化函数详解4. 内存块插入函数详解5. 内存申请函数详解6. 内存释放函数详解…

操作系统考试复习——第四章 4.3连续分配存储管理方式

在这里的开头需要讲述一下碎片&#xff0c;碎片分为内碎片和外碎片两种。 内碎片&#xff1a;分区之内未被利用的空间外碎片&#xff1a;分区之间难以利用的空闲分区&#xff08;通常是小空闲分区&#xff09;。 连续分配存储管理方式: 为了能将用户程序装入内存&#xff0c…

力扣刷题Day12_2

144.二叉树的前序遍历 测试代码main() class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.left leftself.right rightfrom typing import Listclass Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:s Solution…

C++易错编程练习题(1)

0 编程练习 基础不牢靠&#xff0c;回头来补课。小白这个系列主要是为了重新打基础&#xff0c;为一些常见的易错编程练习题提供记录。其间若有错误&#xff0c;欢迎指出&#xff0c;轻喷勿骂。毕竟小白确实是基础不牢靠。 1 题目 自定义函数之整数处理。 题目描述 输入10个…

多视图局部共现和全局一致性学习提高乳腺图像分类的综合性

文章目录 Multi-view Local Co-occurrence and Global Consistency Learning Improve Mammogram Classification Generalisation摘要本文方法global consistency modulelocal co-occurrence module (LCM) 实验结果 Multi-view Local Co-occurrence and Global Consistency Lear…

okio篇3-超时机制

关于System.nanoTime System.currentTimeMills与System.nanoTime实际都是时间间隔&#xff0c;只不过两个时间的起始时间衡量不一致。 我们比较常用的&#xff0c;实际是System.currentTimeMills()&#xff0c;这个时间是以1970-01-01起始&#xff0c;到系统显示时间的间隔。…

聚浪成潮,网易数帆CodeWave智能开发平台开启低代码新时代

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着全球范围内新一代人工智能技术发展突飞猛进&#xff0c;社会各领域从数字化、网络化向智能化转变&#xff0c;如何进一步释放数据生产力、加速智能化转型已成为企业发展的必修课。 2023年4月25日&#xff0c;“网易数帆…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作&#xff08;GORM&#xff09; &#xff08;1&#xff09;初始化…

Mysql Sharding-JDBC读写分离 原理

0 课程视频 深入Sharding-JDBC分库分表从入门到精通【黑马程序员】_哔哩哔哩_bilibili 1 基本概念 1.1应用逻辑 1.1.1 msyql 多库 多表 多服务器 1.1.2 通过Sharding-JDBC jar包->增强JDBC 访问多数据源 -> 自动处理成一个数据源 1.1.3 使用数据的人 -> 使用Sh…