java map.ceiling
时间: 2023-11-29 19:42:20 浏览: 104
`java.util.Map` 接口中的 `ceilingKey(K key)` 方法返回大于等于给定键的最小键,如果不存在这样的键,则返回 `null`。如果给定键为 `null` 并且此映射具有可比较的键,则此方法将抛出 `NullPointerException`。
`ceilingEntry(K key)` 方法与 `ceilingKey(K key)` 类似,但返回的是键值对而不是键。
示例代码:
```java
Map<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
String key = "banana";
Map.Entry<String, Integer> entry = map.ceilingEntry(key);
if (entry != null) {
System.out.println(entry.getKey() + " : " + entry.getValue());
} else {
System.out.println("No entry found for key " + key);
}
```
输出结果为:
```
banana : 2
```
相关问题
帮我把下列代码转换为c++:import java.io.*; import java.util.TreeMap; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(read.readLine()); String[] str = read.readLine().split(" "); int dp[] = new int[n];//以array[i]结尾的序列的最长长度 int array[] = new int[n]; for(int i=0;i<n;i++){ array[i] = Integer.parseInt(str[i]); dp[i] = 0; } int max = 0;//最长子序列长度 int flag = 0;//当前最长序列 TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>();//(长度为i的最小结尾数, 序列长度i) for(int i=0;i<n;i++){ Integer key = map.ceilingKey(array[i]); if(key == null){//没找到ceiling,说明当前array是最大的,添加一个键值对,序列长度加1 map.put(array[i],++flag); dp[i] = flag; }else{//找了,更新,(键1,值1)替换成(键2,值1) dp[i] = map.get(key); map.remove(key); map.put(array[i],dp[i]); } max = Math.max(max, dp[i]); } //System.out.println(max); String sout = ""; for(int j = n-1;j>=0;j--){//倒序遍历,遇到len,len-1,len-1...将其加入字符串 if(dp[j] == max){ sout = array[j]+" "+sout ; max--; } } System.out.print(sout); } }
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAXN 100005
int array[MAXN],dp[MAXN],n;//以array[i]结尾的序列的最长长度
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&array[i]);
dp[i] = 0;
}
int max = 0;//最长子序列长度
int flag = 0;//当前最长序列
for(int i=0;i<n;i++){
int j=0,k=max;//二分查找
while(j<k){
int mid = (j+k)>>1;
if(dp[mid]<array[i]){
j = mid+1;
}else{
k = mid;
}
}
dp[j] = array[i];
if(j == max){
max++;
flag++;//标记序列长度
}
}
printf("%d\n",flag);
return 0;
}
阅读全文