Java每日一练(20230418) N皇后II、字符串相乘、买卖股票最佳时机

简介: Java每日一练(20230418) N皇后II、字符串相乘、买卖股票最佳时机

1. N皇后 II

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

输入:n = 4

输出:2

解释:如上图所示,4 皇后问题存在两个不同的解法。


示例 2:

输入:n = 1

输出:1


提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

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

```Java
class Solution {
    private boolean col[];
    private boolean dia1[];
    private boolean dia2[];
    public int totalNQueens(int n) {
        col = new boolean[n];
        dia1 = new boolean[2 * n - 1];
        dia2 = new boolean[2 * n - 1];
        return putQueen(n, 0);
    }
    private int putQueen(int n, int index) {
        int res = 0;
        if (index == n) {
            return 1;
        }
        for (int i = 0; i < n; i++) {
            if (!col[i] && !dia1[i - index + n - 1] && !dia2[i + index]) {
                ________________________;
            }
        }
        return res;
    }
}
```

出处:

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

代码:

import java.util.*;
public class totalNQueens {
    public static class Solution {
        private boolean col[];
        private boolean dia1[];
        private boolean dia2[];
        public int totalNQueens(int n) {
            col = new boolean[n];
            dia1 = new boolean[2 * n - 1];
            dia2 = new boolean[2 * n - 1];
            return putQueen(n, 0);
        }
        private int putQueen(int n, int index) {
            int res = 0;
            if (index == n) {
                return 1;
            }
            for (int i = 0; i < n; i++) {
                if (!col[i] && !dia1[i - index + n - 1] && !dia2[i + index]) {
                    col[i] = true;
                    dia1[i - index + n - 1] = true;
                    dia2[i + index] = true;
                    res += putQueen(n, index + 1);
                    col[i] = false;
                    dia1[i - index + n - 1] = false;
                    dia2[i + index] = false;
                }
            }
            return res;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.totalNQueens(4));
        System.out.println(s.totalNQueens(1));
    }
}

输出:

2

1


2. 字符串相乘

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"

说明:

  1. num1num2 的长度小于110。
  2. num1num2 只包含数字 0-9
  3. num1num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理

出处:

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

代码:

import java.util.*;
public class multiply {
    public static class Solution {
        public String multiply(String num1, String num2) {
            if (num1.equals("0") || num2.equals("0"))
                return "0";
            int m = num1.length();
            int n = num2.length();
            int[] intRes = new int[m + n - 1];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    intRes[i + j] += (num1.charAt(i) - 48) * (num2.charAt(j) - 48);
                }
            }
            for (int i = intRes.length - 1; i > 0; i--) {
                if (intRes[i] >= 10) {
                    intRes[i - 1] += intRes[i] / 10;
                    intRes[i] %= 10;
                }
            }
            String res = "";
            for (int i = 0; i < intRes.length; i++) {
                res += String.valueOf(intRes[i]);
            }
            return res;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.multiply("2", "3"));
        System.out.println(s.multiply("123", "456"));
    }
}

输出:

6

56088


3. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

示例 1:

输入:[7,1,5,3,6,4]

输出:5

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。


示例 2:

输入:prices = [7,6,4,3,1]

输出:0

解释:在这种情况下, 没有交易完成, 所以最大利润为 0。


提示:

  • 1 <= prices.length <= 10^5
  • 0 <= prices[i] <= 10^4

出处:

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

代码:

import java.util.*;
public class maxProfit {
    public static class Solution {
        public int maxProfit(int[] prices) {
            int n = prices.length;
            if (n < 2) {
                return 0;
            }
            int maxProfit = 0;
            int minPrice = prices[0];
            for (int i = 1; i < n; i++) {
                if (prices[i] < minPrice) {
                    minPrice = prices[i];
                } else if (prices[i] - minPrice > maxProfit) {
                    maxProfit = prices[i] - minPrice;
                }
            }
            return maxProfit;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums = {7,1,5,3,6,4};
        System.out.println(s.maxProfit(nums));
        int[] nums2 = {7,6,4,3,1};
        System.out.println(s.maxProfit(nums2));
    }
}

输出:

5

0


🌟 每日一练刷题专栏 🌟

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

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

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

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

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


目录
相关文章
|
3月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
420 108
|
5月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
372 14
|
5月前
|
SQL JSON Java
告别拼接噩梦:Java文本块让多行字符串更优雅
告别拼接噩梦:Java文本块让多行字符串更优雅
599 82
|
9月前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
269 13
|
9月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
219 17
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
324 83
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
200 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
226 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案