- 202109-1数组推导
- 202104-1灰度直方图
- 202109-2非零段划分
- HashMap和TreeMap
- 思路
- Map遍历
- 方法一:
- 方法二:
- 方法三:
- 方法四:
- 今日推歌
//100分
import java.util.Scanner;
public class Main {
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int []arr = new int[n];
for(int i=0;iarr[i-1]){
min=min+arr[i];
}
max=max+arr[i];
}
System.out.println(max+"n"+min);
}
}
202104-1灰度直方图
//100分
public class Main {
public static void main(String [] args){
run();
}
public static void run(){
//输入
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int l = scanner.nextInt();
int[] h = new int[l];
int[] ele = new int[n*m];
for(int i=0;i
System.out.print()输出不自动换行;System.out.println()会自动换行
栗子:每输出5个数据换一行
//其实就是加一个计数器
int a=1;
for(int i=0;i<20;i++){
System.out.print(i+" ");
if(a%5==0){
System.out.println();
}
a++;
}
202109-2非零段划分
HashMap和TreeMap
- HashMap:基于哈希表实现,继承AbstractMap。适用于在Map中插入、删除和定位元素。
- Treemap:基于红黑树实现,继承自SortedMap。适用于按自然顺序或自定义顺序遍历键(key)。
- HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
思路
-
写一个计算某数组arr[i]中非零段的个数的函数notZero();
-
在Map中存储数组中每一种非零的值以及其对应在数组中的下标位置(list表示);
(此时为了方便后面的操作,在数组两端各加一个0,这样并不会影响结果)
-
从小到大遍历数组中每一种非零的值(由于不需要输出key值,此处使用values遍历),并将其在每个位置都置零,再计算当前数组的非零段个数。
-
非零段数的改变:改变某位置的元素为0,若它的前一个元素和后一个元素都非零,则非零段数在原基础上加一;若它的前一个元素和后一个元素都为零,则非零段数在原基础上减一;其余情况的非零段数不改变。
-
使用Math.max()找到最大非零段数,输出即可。
//100分
public class Main {
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n+2];
arr[0]=arr[n+1]=0;
Map> map = new TreeMap<>();
for(int i=1;i<= n;i++){
arr[i]= scanner.nextInt();
if (arr[i]!=0){
if (map.containsKey(arr[i])){
map.get(arr[i]).add(i);
}else {
ArrayList list = new ArrayList<>();
list.add(i);
map.put(arr[i],list);
}
}
}
int count = notZero(arr);
int max = count;
Collection> lists = map.values();
for (ArrayList list:lists){
for (int i:list){
arr[i]=0;
if(arr[i-1] != 0 && arr[i+1] != 0){
count++;
}else if (arr[i-1] == 0 && arr[i+1] == 0){
count--;
}
}
max = Math.max(max,count);
}
System.out.println(max);
}
public static int notZero(int[] arr){
int nums = 0;
for(int i=0;i
Map遍历
方法一:
通过forEach接口
Integer value=null;
myMap.forEach((k,v)->
{
value=v;
});
方法二:
通过keySet遍历(先得到key的值,再通过key值得到value值)
String key = null;
Integer value = null;
Iterator iter = myMap.keySet().iterator();
while (iter.hasNext()) {
key = (String)iter.next();
value = (Integer)myMap.get(key);
}
方法三:
通过entrySet遍历(通过Map.entrySet使用迭代器iterator遍历key和value)
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry。它表示Map中的一个实体(一个key-value对)
String key = null;
Integer value = null;
Iterator iter = myMap.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
key = (String)entry.getKey();
value = (Integer)entry.getValue();
}
方法四:
通过values遍历(通过Map.values()遍历所有的value,但不能遍历key)
//使用迭代器
Integer value = null;
Collection c = myMap.values();
Iterator iter= c.iterator();
while (iter.hasNext()) {
value = (Integer)iter.next();
}
//不适用迭代器
Collection c = myMap.values();
for (String v : c) {
System.out.println("value= " + v);
}
今日推歌
----《我爱你不问归期》
是想念如你温柔过境
才发现原来花开都有声音
只要你在我生命途径
再不怕时光匆匆如旅
是幸福在我耳际低语
才忘了寒风不曾停下足迹
直到我走遍半生四季
才懂得风景都不及你



