Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题

这篇具有很好参考价值的文章主要介绍了Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

目录

1. N 皇后  🌟🌟🌟

2. 搜索二维矩阵  🌟🌟

3. 发奖金问题 🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. N 皇后

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

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

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

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

代码:

import java.util.*;
public class solveNQueens {
    public static class Solution {
        public List<List<String>> solveNQueens(int n) {
            List<List<String>> res = new ArrayList<List<String>>();
            int[] queenList = new int[n];
            placeQueen(queenList, 0, n, res);
            return res;
        }
        private void placeQueen(int[] queenList, int row, int n, List<List<String>> res) {
            if (row == n) {
                ArrayList<String> list = new ArrayList<String>();
                for (int i = 0; i < n; i++) {
                    String str = "";
                    for (int col = 0; col < n; col++) {
                        if (queenList[i] == col) {
                            str += "Q";
                        } else {
                            str += ".";
                        }
                    }
                    list.add(str);
                }
                res.add(list);
            }
            for (int col = 0; col < n; col++) {
                if (isValid(queenList, row, col)) {
                    queenList[row] = col;
                    placeQueen(queenList, row + 1, n, res);
                }
            }
        }
        private boolean isValid(int[] queenList, int row, int col) {
            for (int i = 0; i < row; i++) {
                int pos = queenList[i];
                if (pos == col) {
                    return false;
                }
                if (pos + row - i == col) {
                    return false;
                }
                if (pos - row + i == col) {
                    return false;
                }
            }
            return true;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.solveNQueens(4));
    }
}

输出:

[[.Q.., ...Q, Q..., ..Q.], [..Q., Q..., ...Q, .Q..]]

2. 搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -10^4 <= matrix[i][j], target <= 10^4

代码:

import java.util.*;
public class searchMatrix {
    public static class Solution {
        public boolean searchMatrix(int[][] matrix, int target) {
            if (matrix.length == 0 || matrix[0].length == 0)
                return false;
            int begin, mid, end;
            begin = mid = 0;
            int len1 = matrix.length, len2 = matrix[0].length;
            end = len1 * len2 - 1;
            while (begin < end) {
                mid = (begin + end) / 2;
                if (matrix[mid / len2][mid % len2] < target)
                    begin = mid + 1;
                else
                    end = mid;
            }
            return matrix[begin / len2][begin % len2] == target;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[][] matrix = {{1,3,5,7},{10,11,16,20},{23,30,34,60}};
        System.out.println(s.searchMatrix(matrix, 3));
        int[][] matrix2 = {{1,3,5,7},{10,11,16,20},{23,30,34,60}};
        System.out.println(s.searchMatrix(matrix2, 13));
    }
}

输出:

true
false


3. 发奖金问题

过年了,村里要庆祝。村长说,村里有一笔钱作为奖金,让每个人写一个纸条上来,谁写的数目与奖金最接近,就算猜中,这笔奖金就归谁,如果多人猜中,则平分。

编写程序,算算都有哪些人得到奖金?多少?

代码:

import java.util.Collections;
import java.util.Comparator;
import java.util.Arrays;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
class Solution1 {
    public static void main(String[] args) {
        int award = 100;
        String[] people = { "a", "b", "c", "d", "e", "f", "g", "h" };
        Integer[] guess = { 75, 70, 80, 120, 100, 110, 100, 45 };
        Integer[] ordered = new Integer[people.length];
        for (int i = 0; i < ordered.length; i++)
            ordered[i] = i;
        Arrays.sort(ordered, new Comparator<Integer>() {
            @Override
            public int compare(Integer a, Integer b) {
                int x = guess[a] - award > 0 ? guess[a] - award : award - guess[a];
                int y = guess[b] - award > 0 ? guess[b] - award : award - guess[b];
                return x - y;
            }
        });
        int maxp = 0;
        int i = 0;
        System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));
        while (guess[ordered[i++]] == award)
            maxp++;
        if (maxp <= 1)
            System.out.println(people[ordered[0]] + "一人得奖" + award + "元。");
        else {
            for (i = 0; i < maxp; i++)
                System.out.print(people[ordered[i]] + " ");
            System.out.println("共同得奖" + award / (float) (maxp) + "元。");
        }
    }
}

输出:

e g 共同得奖50.0元。


🌟 每日一练刷题专栏 🌟

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

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

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

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

 主页:https://hannyang.blog.csdn.net/ 文章来源地址https://www.toymoban.com/news/detail-606154.html

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

Golang每日一练 专栏

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

Python每日一练 专栏

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

C/C++每日一练 专栏

Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题,刷题专栏,java,leetcode

Java每日一练 专栏

到了这里,关于Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (每日一练)MATLAB二维插值

    在前面介绍了学习MATLAB的一维插值方法,今天来学习MATLAB二维插值方法。         首先来看二维插值函数的使用格式:         其中x , y , z分别是我们给定的三个同维矩阵,x , y , z三者一 一对应构成我们需要的网格数据,x1,y1即是我们要插值点对应的坐标,z1是同维数

    2024年02月11日
    浏览(39)
  • leetcode 74. 搜索二维矩阵(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/search-a-2d-matrix 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回

    2024年02月16日
    浏览(45)
  • java数据结构与算法刷题-----LeetCode240. 搜索二维矩阵 II

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 法一:把整个数组遍历一遍,时间复杂度O(m*n) 法二:每一行用二分搜索,那么时间复杂度就是O(m * l o g 2 n log_2{n} l o g

    2024年01月22日
    浏览(61)
  • 【OJ每日一练】1127 - 矩阵翻硬币

    🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈   🍂个人博客首页: KJ.JK   💖系列专栏:OJ每日一练 🔸题目描述 接下来有个游戏 首先硬币摆成了一个i行j列的矩阵

    2024年02月02日
    浏览(38)
  • leetcode每日一练-第98题- 验证二叉搜索树

        一、思路 因为要验证多个节点是否是二叉搜索树,因此使用 递归 二、解题方法 设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r)的范

    2024年02月15日
    浏览(48)
  • Rust每日一练(Leetday0027) 单词搜索、删除重复项II、搜索旋转排序数组II

    目录 79. 单词搜索 Word Search  🌟🌟 80. 删除有序数组中的重复项 II Remove-duplicates-from-sorted-array-II  🌟🌟 81. 搜索旋转排序数组 II Search-in-rotated-sorted-array-II  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定一

    2024年02月08日
    浏览(44)
  • Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

    目录 58. 最后一个单词的长度 Length of Last Word  🌟 59. 螺旋矩阵 II Spiral Matrix II  🌟🌟 60. 排列序列 Permutation Sequence  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  s ,由

    2024年02月10日
    浏览(51)
  • Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

    目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix  🌟🌟 330. 按要求补齐数组 Patching Array  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定一个  m x n  整数矩阵  matrix  ,找出

    2024年02月12日
    浏览(48)
  • 搜索二维矩阵【二分】

    Problem: 74. 搜索二维矩阵 可以二分一次,也可以二分两次。 时间复杂度: 添加时间复杂度, 示例: O ( l o g n + l o g m ) O(logn + logm) O ( l o g n + l o g m ) 空间复杂度: 添加空间复杂度, 示例: O ( 1 ) O(1) O ( 1 )

    2024年02月02日
    浏览(34)
  • leetcode 74.搜索二维矩阵

    本题其实就是一个变形的二分查找而已。这里不采用两次二分或者一次二分的方法了,leetcode上是很详细的,这里就讲讲普通的思路是怎样的。 思路:首先就是把二维数组化为一维数组,这个时候一维数组需要开的大一些,不然的话会过不了一些大数据样例。依次把二维数组

    2024年04月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包