Java作业2

news2025/4/7 19:39:44

1.递归求解汉诺塔问题

拿三个为例子

先从A设法拿走两个盘子到B上,再拿一个盘子到C上,再从B上挪走一个到A,再挪下面的到C上 

如果有N个盘子,我们也一样的步骤,先设法拿N-1个盘子到B,再拿最底部的盘子到C,再从B上拿走(N-1)-1个盘子到A,以此类推,直到所有盘子都到C上

    public static void move(char pos1, char pos2){
        System.out.print(pos1+" => "+pos2+" ");
    }
    /**
     * @param n 盘子数目
     * @param pos1 起始位置
     * @param pos2 中转位置
     * @param pos3 目的位置
     */
    public static void hanio(int n, char pos1, char pos2, char pos3){
        if(n == 1){
            move(pos1,pos3);
            return;
        }
        hanio(n-1,pos1,pos3,pos2);//第一次目的地是pos2
        move(pos1,pos3);
        hanio(n-1, pos2,pos1,pos3);
    }
    public static void main(String[] args) {
        hanio(1,'A','B','C');
        System.out.println();
        hanio(2,'A','B','C');
        System.out.println();
        hanio(3,'A','B','C');
        System.out.println();
    }

2.实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}

//方式一:扩大的还是原来的数组,这样做的不好的地方是,改变了原来数组的值
public static void func2(int[] array) {

      for (int i = 0; i < array.length; i++) {

          array[i] = array[i]*2;

      }

  }


//方式二:扩大的新的数组,没有修改原来的值
public static int[] func3(int[] array) {

    int[] tmp = new int[array.length];//

    for (int i = 0; i < array.length; i++) {

        tmp[i] = array[i]*2;

    }

    return tmp;

}

3.调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。

如数组:[1,2,3,4,5,6]

调整后可能是:[1, 5, 3, 4, 2, 6]

设置两个“指针”:i和j, i在前往后走,j在后往前走,i和j有一个遇到奇数就交换

    public static void fun3(int[] array){
        int i = 0;
        int j = array.length-1;
        while(i<j){
            //i从前往后遍历,走完之后i下标就停在偶数位置
            while(i<j && array[i] % 2 != 0){
                i++;
            }
            //j从后往前遍历,走完之后j下标就停在奇数位置
            while(i<j && array[j] %2 == 0){
                j--;
            }
            //i和j交换
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
        }
    }

4.给定一个有序整型数组, 实现二分查找

public static int binarySearch(int[] array,int key) {
    int left = 0;
    int right = array.length-1;
    while (left <= right) {
        int mid = (left+right)/2;
        if(array[mid] == key) {
            return mid;
        }else if(array[mid] < key) {
            left = mid+1;
        }else {
            right = mid-1;
        }
    }
    return -1;//代表没有找到这个数字
}

 5.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

暴力解法:

设置i和j,i在第一个,j往后遍历,看看j位置的值与i位置的值相加是不是等于目标值,一轮遍历后没有再把i往右边移动

    public static int[] findnumber(int[] array, int target){
        int[] ret = {-1,-1};
        for (int i = 0; i < array.length; i++) {
            for (int j = i+1; j < array.length; j++) {
                if(array[i] + array[j] == target){
                    //return new int[]{i,j};
                    ret[0] = i;
                    ret[1] = j;
                }
            }
        }
        return ret;
    }

6.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

用异或方法,相同元素异或 = 0;0异或n = n

相同元素异或完之后相当于消去,消到后面发现有异或结果是某个元素,说明那个元素只出现1次

public int singleNumber(int[] nums) {
    // 用异或运算的性质可以巧妙的解决这个问题,因为数组中只有一个数字出现一次
    // 则其他出现两次的数字用异或运算后都是0,最终整个数组异或运算的结果即为所求。
    int ret = 0;
    for (int i : nums) {
        ret ^= i;
    }
    return ret;
}

7.给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素

示例 1:

输入:[3,2,3]
输出:3

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2
/**
 * 排序法
 * 将数组排序后,数组n/2的元素一定是众数
 */
public int majorityElement(int[] nums) {
    Arrays.sort(nums);
    return nums[nums.length/2];
}

摩尔投票法:

数组[1,1,1,2,2,2,2]

 

 1和2要参加竞选,给1投一票,再给2投一票,这相当于是抵消了,数组后面剩一个2没人跟他抵消,所以2就是最多的元素

    public int majorityElement(int[] nums) {
        int candidate = 0;
        int count = 0;
        
        for (int num : nums) {
            if (count == 0) {
                candidate = num;
                count = 1;
            } else if (num == candidate) {
                count++;
            } else {
                count--;
            }
        }
        
        return candidate;
    }

8.给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。

示例 1:

输入:arr = [2,6,4,1]

输出:false

解释:不存在连续三个元素都是奇数的情况。

示例 2:

输入:arr = [1,2,34,3,4,5,7,23,12]

输出:true

解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。

    public static boolean fun5(int[] arr){
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] % 2 != 0){
                count++;
                if(count == 3){
                    return true;
                }
            }else{
                count = 0;
            }
        }
        return false;
    }

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

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

相关文章

【算法】逆波兰表达式

文章目录 定义求法代码思想&#xff1a; 定义 逆波兰表达式也称为“后缀表达式”&#xff0c;是将运算符写在操作数之后的运算式。 求法 *如&#xff1a;(ab)c-(ab)/e的转换过程&#xff1a; 先加上所有的括号。 (((ab)*c)-((ab)/e))将所有的运算符移到括号外面 (((ab) c)* …

Unity游戏源码分享-全民飞机大战源码unity2019

Unity游戏源码分享-全民飞机大战源码unity2019 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88204008

67 # 对象的处理

上一节学习了 form 数据的处理&#xff0c;这一节学习 Ajax 的方式提交数据 服务端的代码如下 const http require("http"); const url require("url"); const querystring require("querystring");let server http.createServer();server…

定时器

定时器 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码. 定时器是一种实际开发中非常常用的组件. 比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连. 比如一个 Map, 希望里面的…

elasticsearch简单入门语法

基本操作 创建不同的分词器 ik_smart&#xff1a; 极简分词 &#xff1b; ik_max_word: 最细力再度分词 基本的rest命令 methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档&#xff08;指定文档id&#xff09;POSTlocalhost:9200/索引名称/类型名称创建文…

Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言 QStackedWidget继承于QFrame&#xff0c;QFrame继承于QWidget&#xff0c;是Qt常用的堆栈窗口部件。 框架类QFrame介绍 QStackedWidget堆栈窗口&#xff0c;根据下标切换&#xff0c;一次显示一个小部件&#xff0c;常用于应用界面切换、图片轮询播放等场景。 二、QSt…

Linu网络服务NFS

linux网络服务NFS 一.NFS简介二.NFS原理三.NFS优势四.配置文件五.NFS共享存储服务的操作步骤 一.NFS简介 NFS&#xff08;网络文件服务&#xff09; NFS是一种基于tcp/ip传输的网络文件系统协议&#xff0c;最初由sun公司开放通过使用NFS协议&#xff0c;客户机可以像访问本地…

Java课题笔记~ ServletContext

单个Servlet的配置对象 web.xml <servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class><init-param><param-name>charset</param-name><param-value>utf-8&…

SpringMVC注解配置

1xml配置方式&#xff08;配置文件注解的方式&#xff09; 前提导入相关依赖&#xff1a;pom文件 说明&#xff1a;下方依赖是ssm项目中较为常用的一部分&#xff0c;可能部分依赖对于springmvc配置并未有关系&#xff0c;根据自己需求添加和删除。 <dependencies> &l…

新手如何快速学习单片机?

初步确定学习目标&#xff1a;是学习简单便宜的51呢&#xff0c;还是学习简单但是性价比已经不算太高的&#xff0c;但是功能强大稳定可靠的avr&#xff0c;还是物美价廉的stm32&#xff0c;或者ARM9&#xff08;可以跑系统了&#xff09;&#xff0c;再往上x86什么的如果是学8…

成员变量和局部变量的区别

局部变量成员变量 1、定义的位置不一样 在方法的内部&#xff0c;方法申明上&#xff08;形参&#xff09;。 声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 在方法的外部&#xff0c;直接写在类当中 &#xff08;类中方法外的变量&#xff09; 2、作用范…

opencv 实现手势跟踪并返回位置信息(封装调用)

OpenCV 是一个基于 Apache2.0 许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 需要提前准备opencv 和 mediapipe库 pip --default-timeout5000 install -i https://pypi.tuna.t…

什么是IMAP协议?

IMAP&#xff08;Internet Message Access Protocol&#xff09;是一个应用层协议&#xff0c;用于访问和管理存储在远程服务器上的电子邮件。相比于POP3&#xff0c;IMAP提供了更加丰富的功能&#xff0c;特别适用于需要在多台设备上访问电子邮件的用户。以下是关于IMAP的详细…

支持多用户协同的思维导图TeamMapper

什么是 TeamMapper &#xff1f; TeamMapper 是基于 Mindmapp 开发的用于绘制思维导图的 Web 应用程序。它使得思维导图变得简单&#xff0c;你可以托管并创建您自己的思维导图。与您的团队分享您的思维导图会议并在思维导图上进行协作。 软件特点&#xff1a; 创建&#xff1…

解决:Unexpected ‘debugger‘ statement.eslint(no-debugger) (即:页面中的 debugger 标红)的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; Unexpected debugger statement.eslint(no-debugger) 中文为&#xff1a; 意外的“调试器”语句.eslint&#xff08;无调试器&#xff09; 其二、问题描述为&#xff1a; 在正常的 vue 项目中使用 debugger 的调试过程…

人工智能原理(2)

目录 一、知识与知识表示 1、知识 2、知识表示 3、知识表示方法 二、谓词逻辑表示法 1、命题逻辑 2、谓词逻辑 三、产生式表达法 1、知识的表示方法 2、产生式系统组成 3、推理方式 4、产生式表示法特点 四、语义网络 1、概念及结构 2、语义网络的基本语义联系 …

bye 我的博客网站

Bye&#x1f64b;&#x1f64b;&#x1f64b;&#xff0c;我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在&#xff0c;好吧&#xff0c;最后一次展示它了&#xff0c;博客网站地址在这里&#xff0c;它…

空降流量危机?QQ音乐升级架构应对高并发

# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第2期 | 赵威&#xff1a;QQ音乐评论系统如何实现高可用&#xff1f; QQ 音乐自诞生以来&#xff0c;已有多个版本的评论业务系统。最新版本是19年再次全新迭代&#xff0c;基于 tlist 存储&#xff0c;按照发…

章节4:JavaScript操作Cookie

章节4&#xff1a;JavaScript操作Cookie 直接利用Cookie登录 JavaScript语法 获取&#xff1a;document.cookie; 设置&#xff1a;document.cookie“usernamexx”; 删除&#xff1a;document.cookie“usernamexx;expiresThu, 01 Jan 1970 00:00:00 GMT”;

Goland报错 : Try to open it externally to fix format problem

这句报错的意思也就是 : 尝试在外部打开以解决格式问题 解决方案 : 将图片格式该为.png格式&#xff0c;再粘贴进去就可以了! 改变之后的效果 : 那么&#xff0c;这样就ok了