分享一些题目的基本方法和思路
//使用一个哈希表存储
Map<Integer,List<String>> = new HashMap<>();
//先比身高,身高一样比体重
// 使用优先队列
import java.util.*;
class Student implements Comparable<Student> {
int id;
int height;
int weight;
Student(int id, int height, int weight) {
this.id = id;
this.height = height;
this.weight = weight;
}
@Override
public int compareTo(Student other) {
if (this.height != other.height) {
return this.height - other.height; // 身高升序
} else if (this.weight != other.weight) {
return this.weight - other.weight; // 体重升序
} else {
return this.id - other.id; // 编号升序
}
}
}
public class StudentSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取学生数量
int n = scanner.nextInt();
int[] heights = new int[n];
int[] weights = new int[n];
// 读取身高和体重
for (int i = 0; i < n; i++) {
heights[i] = scanner.nextInt();
}
for (int i = 0; i < n; i++) {
weights[i] = scanner.nextInt();
}
// 创建学生列表
List<Student> students = new ArrayList<>();
for (int i = 0; i < n; i++) {
students.add(new Student(i + 1, heights[i], weights[i]));
}
// 使用PriorityQueue进行排序
PriorityQueue<Student> pq = new PriorityQueue<>();
pq.addAll(students);
// 输出排序后的学生编号
while (!pq.isEmpty()) {
System.out.print(pq.poll().id + (pq.isEmpty() ? "" : " "));
}
scanner.close();
}
}
//数组排序求和
int sum = Arrays.stream(numbers).sum();
//用哈希表来做
//DFS遍历树,注意二叉树的性质,某个节点为i,左子节点为2*i+1,右子节点为2*i+2
class Treenode{
int val;
Treenode l;
Treenode r;
Treenode(int val){
this.val=val;
this.l=null;
this.r=null;
}
}
public class spentTime {
static int ans=0;
public static void dfs(Treenode root,int pathSum){
if(root.l==null&&root.r==null){
ans = Math.max(pathSum+ root.val,ans);
return;
}
if(root.l!=null){
dfs(root.l,pathSum+root.val);
}
if(root.r!=null){
dfs(root.r,pathSum+ root.val);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nums = new int[1000];
int i=0;
while (sc.hasNextInt()){
nums[i++] = sc.nextInt();
}
Treenode[] list = new Treenode[i];
for(int j=0;j<i;j++){
if(nums[j]!=-1){
list[j] =new Treenode(nums[j]);
}
}
//二叉树的性质
for (int j = 0; j < i; j++) {
if (nums[j] != -1) {
if (j * 2 + 1 < i) {
list[j].l = list[j * 2 + 1];
}
if (j * 2 + 2 < i) {
list[j].r= list[j * 2 + 2];
}
}
}
Treenode root = list[0];
ans=0;
dfs(root,0);
System.out.println(ans);
}
}