第四周后端组作业

  1. 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,不要使用额外的数组空间,你必须在 原地 修改输入数组

说明:原地删除重复出现的元素即为不能申请额外的数组空间,只能在原有数组上进行修改

示例1:

输入: 3 1,1,2
输出:2, nums =[1,2]
解释:应该输出新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。 输入数据第一个为数组的个数,后面为数组的参数 示例 2:

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

提示:

  1. 0 <= nums.length <= 3 * 104
  2. -104 <= nums[i] <= 104
  3. nums 已按升序排列
  1. public class Main {
  2. public static void main(String[] args) {
  3. Scanner input = new Scanner(System.in);
  4. System.out.print("请输入你的数组大小: ");
  5. int n;
  6. n = input.nextInt();
  7. int[] nums = new int[n];
  8. System.out.print("请输入数组的元素: ");
  9. for(int i = 0; i<n; i++) {
  10. nums[i] = input.nextInt();
  11. }
  12. Arrays.sort(nums);//排序 升序
  13. int slow = 0;//慢指针
  14. int fast;//快指针
  15. //当快指针和慢指针所指向的值不一样时就将慢指针的值加一 并且将慢指针只指向快指针当前的值
  16. for(fast = 1;fast<n;fast++) {
  17. if(nums[slow]!=nums[fast]) {
  18. slow++;
  19. nums[slow] = nums[fast];
  20. }
  21. }
  22. System.out.print("长度: ");
  23. System.out.print(slow+1);
  24. System.out.print("去重后的数组: ");
  25. for(int i =0; i<=slow; i++) {
  26. System.out.print(nums[i]+" ");
  27. }
  28. }
  29. }

结果:
image.png

  1. 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例一:

输入:

1,2,3,4,5,6,7

k=3

输出:

[5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]

要求:大二同学解此题不允许使用临时数组存取数据,只能在原数组上进行修改
代码:

  1. package Weekly_Task.four;
  2. /**
  3. * @auther Devil(丁杨维)
  4. * @create 2021-11-08-16:54
  5. */
  6. import java.util.Scanner;
  7. public class Demo2 {
  8. public static void main(String[] args) {
  9. Scanner input = new Scanner(System.in);
  10. System.out.print("输入数组的长度: ");
  11. int n;
  12. n = input.nextInt();
  13. int[] nums = new int[n];
  14. System.out.print("输入数组的元素: ");
  15. for(int i = 0; i<n; i++) {
  16. nums[i] = input.nextInt();
  17. }
  18. System.out.print("请输入你要向右移动的位次数: ");
  19. int k = input.nextInt();
  20. while(k-->0) {
  21. int temp = nums[n-1];
  22. for(int i = n-2; i>=0; i--) {
  23. nums[i+1] = nums[i];
  24. }
  25. nums[0] = temp;
  26. }
  27. for(int i=0; i<nums.length; i++) {
  28. System.out.print(nums[i]+" ");
  29. }
  30. }
  31. }

结果:
image.png

  1. 请写出下面代码的输出结果(自己先看着代码思考,写出答案,不要用编辑器运行
  1. //爷爷类
  2. class Ye {
  3. public String show(Sun obj) {
  4. return ("Ye and Sun");
  5. }
  6. public String show(Ye obj) {
  7. return ("Ye and Ye");
  8. }
  9. }
  10. //爸爸类
  11. class Fu extends Ye {
  12. public String show(Fu obj) {
  13. return ("Fu and Fu");
  14. }
  15. public String show(Ye obj) {
  16. return ("Fu and Ye");
  17. }
  18. }
  19. //儿子类
  20. class Zi extends Fu {
  21. }
  22. //孙子类
  23. class Sun extends Fu {
  24. }
  25. public class PolymorphicTest {
  26. public static void main(String[] args) {
  27. Ye y = new Ye();
  28. Ye y2 = new Fu(); //向上
  29. Fu f = new Fu();
  30. Zi z = new Zi();
  31. Sun s = new Sun();
  32. System.out.println("第一题 " + y.show(f));
  33. System.out.println("第二题 " + y.show(z));
  34. System.out.println("第三题 " + y.show(s));
  35. System.out.println("第四题 " + y2.show(f));
  36. System.out.println("第五题 " + y2.show(z));
  37. System.out.println("第六题 " + y2.show(s));
  38. System.out.println("第七题 " + f.show(f));
  39. System.out.println("第八题 " + f.show(z));
  40. System.out.println("第九题 " + f.show(s));
  41. }
  42. }
  1. 你的答案:
  2. 第一题 :"Ye and Ye"
  3. 第二题 :"Ye and Ye"
  4. 第三题 :"Ye and Sun"
  5. 第四题 :"Fu and Fu"
  6. 第五题 :"Fu and Fu"
  7. 第六题 :"Ye and Sun"
  8. 第七题 :"Fu and Fu"
  9. 第八题 :"Fu and Fu"
  10. 第九题 :"Ye and Sun"

如果你对答案很意外,或者不解,那么恭喜你,你又能学到新知识了,再去深入了解一下多态吧。

  1. 请将这张图片从D:\images\EDG.png 用java代码将其拷贝到D:\img\EDG.png

提示:在自己D盘下新建文件夹images,将这张图片粘贴进去并改名

  1. public class Main {
  2. public static void main(String[] args) throws Exception {
  3. File file = new File("D:\\img");
  4. if(!file.exists()) {
  5. file.mkdir();
  6. }
  7. File file1 = new File("D:\\img\\EDG.png");
  8. if(!file1.exists()) {
  9. file1.createNewFile();
  10. }
  11. FileInputStream is = new FileInputStream("D:\\images\\EDG.png");
  12. FileOutputStream os = new FileOutputStream(file1);
  13. byte[] b = new byte[1024];
  14. int len;
  15. while((len = is.read(b))!=-1) {
  16. os.write(b,0,len);
  17. }
  18. os.flush();
  19. os.close();
  20. is.close();
  21. }
  22. }
  1. 简单的在线信息接收

要求:用户能在客户端向服务端发送信息,服务端能够接收用户所发信息,用户向服务端发送“ bye”结束发送

服务器:

  1. package Weekly_Task.four;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;
  6. import java.util.Scanner;
  7. /**
  8. * @auther Devil(丁杨维)
  9. * @create 2021-11-08-13:46
  10. */
  11. public class Server {
  12. public static void main(String[] args) throws Exception {
  13. ServerSocket serverSocket = new ServerSocket(9999);
  14. Socket s = serverSocket.accept();;
  15. BufferedReader br = null;
  16. Scanner input = new Scanner(System.in);
  17. System.out.println("==服务端启动==");
  18. while(true){
  19. br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  20. String m = br.readLine();
  21. System.out.println("服务器收到: "+m);
  22. if("bye".equals(m)){
  23. System.out.println("服务器结束运行");
  24. break;
  25. }
  26. }
  27. s.close();
  28. serverSocket.close();
  29. }
  30. }

客户端:

  1. package Weekly_Task.four;
  2. import java.io.*;
  3. import java.net.InetAddress;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6. import java.util.Scanner;
  7. /**
  8. * @auther Devil(丁杨维)
  9. * @create 2021-11-08-13:45
  10. */
  11. public class Client {
  12. public static void main(String[] args) throws Exception {
  13. Socket socket = new Socket(InetAddress.getByName("localhost"),9999);
  14. Scanner input = new Scanner(System.in);
  15. BufferedWriter bw = null;
  16. System.out.println("==客户端启动==");
  17. while(true){
  18. System.out.print("请说: ");
  19. String message = input.nextLine();
  20. bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
  21. bw.write(message);
  22. bw.newLine();
  23. bw.flush();
  24. if(message.equals("bye")){
  25. System.out.println("退出连接");
  26. break;
  27. }
  28. }
  29. }
  30. }

运行实例:
image.png
image.png