414、第三大的数
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
set是无序(不能保证元素的排列顺序:存在set集合哪个位置由这个值的hashCode决定,String类并不是说根据hashcode的值从小到大排序)、不重复的集合。
如何求hashCode:
1、Integer类:他们的hashCode就是数字本身。
2、String类:(空字符串的哈希值为0)
String类不是根据hashCode的值从小到大排序 ,但是Integer类会根据hashCode的值从小到大排序。
Integer类:会根据hashCode的值从小到大排序。
即:当set集合是Integer类时,那么添加的元素会按照从小到大的顺序排序。
class Solution {
public int thirdMax(int[] nums) {
TreeSet set = new TreeSet();
for (int num : nums) {
set.add(num);
if (set.size() > 3) {
set.remove(s.first());
}
}
return s.size() == 3 ? s.first() : s.last();
}
}
434、字符串中的单词数
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
法一:注意有连续空格的情况
class Solution {
public int countSegments(String s) {
if(s.length()==0) return 0;
int count=0;
for(int i=0;i
法二:split解法
注意:String []ss=s.split(" ");//如果两个单词之间有x>1个空格,那么有x-1个空格会变成空字符串传入数组里面
例子:
红色框框里面有八个空格,那么会有7个空字符串传入数组
class Solution {
public int countSegments(String s) {
if(s.length()==0) return 0;
int count=0;
String []ss=s.split(" ");
for(String str:ss){
if(str.length()>0){
count++;
}
}
return count;
}
}
441、排列硬币
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。
法一:动态规划(超出内存限制...........)推导公式:等差数列 n*(n+1)/2
class Solution {
public int arrangeCoins(int n) {
int dp[]=new int[n+1];
int res=0;
int temp=0;//设置一个临时变量来代替n-dp[i],不能用n=n-dp[i],因为for循环i
法二:迭代
class Solution {
public int arrangeCoins(int n) {
int i = 1;
while (n >= i) {
n=n-i;
i++;//第一层1个,第二层2个,第三层3个
}
return i - 1;
}
}



