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

Java每日一练(20230325)

目录

1. 逆序输出  🌟

2. 删除有序数组中的重复项  🌟

3. 直线上最多的点数  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 逆序输出

如:abcd1234,逆序输出:4321dcba

出处:

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

代码:

class ReverseString {
    public static void main(String[] args) {
        String input = "abcd1234";
        char[] try1 = input.toCharArray();
        for (int i = try1.length - 1; i >= 0; i--)
            System.out.print(try1[i]);
        System.out.println();
    }
}

输出:

4321dcba


2. 删除有序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。 for (int i = 0; i < len; i++) {     print(nums[i]); }

示例 1:

输入:nums = [1,1,2]

输出:2, nums = [1,2]

解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:

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

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

解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

提示:

  • 0 <= nums.length <= 3 * 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums 已按升序排列

出处:

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

代码:

public class removeDuplicates {
    public static class Solution {
        public int removeDuplicates(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 0;
            }
            int a = 0;
            for (int b = 1; b < nums.length; b++) {
                if (nums[a] != nums[b]) {
                    a++;
                    nums[a] = nums[b];
                }
            }
            return a + 1;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums = {1,1,2};
        System.out.println(s.removeDuplicates(nums));

        int[] nums1 = {0,0,1,1,1,2,2,3,3,4};
        System.out.println(s.removeDuplicates(nums1));
    }
}

输出:

2
5


3. 直线上最多的点数

给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

示例 1:

输入:points = [[1,1],[2,2],[3,3]]
输出:3

示例 2:

输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4

提示:

  • 1 <= points.length <= 300
  • points[i].length == 2
  • -10^4 <= xi, yi <= 10^4
  • points 中的所有点 互不相同

出处:

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

代码:

import java.util.HashMap;
import java.util.Map;
public class maxPoints {
    public static class Solution {
        public int maxPoints(int[][] points) {
            int n = points.length;
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
            int res = 0;
            for (int i = 0; i < n - 1; i++) {
                Map<String, Integer> slope = new HashMap<>();
                int repeat = 0;
                int tmp_max = 0;
                for (int j = i + 1; j < n; j++) {
                    int dy = points[i][1] - points[j][1];
                    int dx = points[i][0] - points[j][0];
                    if (dy == 0 && dx == 0) {
                        repeat++;
                        continue;
                    }
                    int g = gcd(dy, dx);
                    if (g != 0) {
                        dy /= g;
                        dx /= g;
                    }
                    String tmp = String.valueOf(dy) + "/" + String.valueOf(dx);
                    slope.put(tmp, slope.getOrDefault(tmp, 0) + 1);
                    tmp_max = Math.max(tmp_max, slope.get(tmp));
                }
                res = Math.max(res, repeat + tmp_max + 1);
            }
            return res;
        }
        private int gcd(int dy, int dx) {
            if (dx == 0)
                return dy;
            else
                return gcd(dx, dy % dx);
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[][] points = {{1,1},{2,2},{3,3}};
        System.out.println(s.maxPoints(points));

        int[][] points1 = {{1,1},{3,2},{5,3},{4,1},{2,3},{1,4}};
        System.out.println(s.maxPoints(points1));
    }
}

输出:

3
4

最大公约数 gcd(a, b)

辗转相除法

递归:

private int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }

迭代:

private int gcd(int a, int b) {
    while(b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}


🌟 每日一练刷题专栏 🌟

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


http://www.kler.cn/a/3291.html

相关文章:

  • TCP 三次握手四次挥手
  • 编译安装PaddleClas@openKylin(失败,安装好后报错缺scikit-learn)
  • YOLOv5模型版本详解:n/s/m/l的区别与选型指南
  • HTML 文本格式化详解
  • 使用 Intersection Observer 实现高效懒加载和滚动监听
  • 数据库性能优化(sql优化)_SQL执行计划02_yxy
  • fabric(token-erc-20链码部署)
  • Kalman详尽原理介绍合集
  • [python tools] 今天看到另一个配置工具 YACS,所以做下笔记
  • uni-app:登录与支付--用户信息
  • cpu中缓存简介
  • html+css制作
  • 什么是柔性数组以及柔性数组的用法和特点
  • c语言中的数组、数组名、指针的详解
  • camunda7、camunda8对比分析,哪个版本好
  • Docker Compose更新容器的几种方法
  • 2023最全的Web自动化测试介绍(建议收藏)
  • 蓝桥杯嵌入式RTC实时时钟
  • ffplay源码分析-main函数入口分析
  • 【java】连续最大和、统计回文
  • 力扣-患某种疾病的患者
  • CAN通信----电路图
  • leetcode 回文链表
  • 【多线程】常见的锁策略
  • 【CE进阶】lua脚本使用
  • 网站性能优化篇