1. 李红在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成
了 N 个 1 到 1000 之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把
其余相同的数去掉,不同的数对应着不同学生的学号。然后再把这些数从小到大排序,
按照排好的顺序去找同学做调查。请编写程序协助李红完成“去重”与“排序”的工作。
TreeSet<Integer> trr=new TreeSet<>(); //遍历 for (int i = 0; i < 100; i++) { //存入treeset trr.add((int)(Math.random()*1000)); } //遍历 System.out.println(trr);
2. 编写方法 int digSum(nt arr[ ]),实现在一个数组 arr 中,找出一组不相邻的数字,使得
所选数字和最大。
package cn.sanshu.service.impl; public class Test{ public static void main(String[] args) { int[] arr = {1, 2, 4, 1, 7, 8, 3}; System.out.println(recur_opt(arr.length - 1, arr)); } private static int recur_opt(int i, int[] arr) { if (i == 0) return arr[0]; if (i == 1) return Math.max(arr[0], arr[1]); int a = recur_opt(i - 2, arr) + arr[i]; int b = recur_opt(i - 1, arr); return Math.max(a, b); } // 动态规划 private static int dp_opt(int[] arr) { // 特殊退出条件 if (arr.length == 1) return arr[0]; if (arr.length == 2) return Math.max(arr[0], arr[1]); // 保留中间计算结果, 降低复杂度 int[] opt = new int[arr.length]; opt[0] = arr[0]; opt[1] = arr[1]; for (int i = 2; i < opt.length; i++) { int a = opt[i - 2] + arr[i]; int b = opt[i - 1]; opt[i] = Math.max(a, b); } return opt[opt.length-1]; } }