目录
二、给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
一、垃圾倒序排序算法题
package double_point3;
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
*
* @author : Future master
* @version : 1.0
* @Project : Java算法联系
* @Package : double_point3
* @ClassName : TestOne.java
* @createTime : 2021/11/1 17:47
* @Email : 2467636181@qq.com
*
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
*/
public class TestOne {
public void reverseString(char[] s) {//垃圾题不做解释
for(int i = 0;i<s.length/2;i++){
// char tmp = s[i];
// s[i] = s[s.length-i-1];
// s[s.length-i-1] = tmp;
s[i] ^= s[s.length-i-1];
s[s.length-i-1] ^= s[i];
s[i] ^= s[s.length-i-1];
}
}
public static void main(String[] args) {
TestOne testOne = new TestOne();
char[] s = {'h', 'e', 'l', 'l', 'o'};
testOne.reverseString(s);
System.out.println(Arrays.toString(s));
}
}
二、给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
package double_point3;
import java.util.Locale;
/**
* Created with IntelliJ IDEA.
*
* @author : Future master
* @version : 1.0
* @Project : Java算法联系
* @Package : double_point3
* @ClassName : TestTwo.java
* @createTime : 2021/11/1 18:14
* @Email : 2467636181@qq.com
* 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
* 示例:
* 输入:"Let's take LeetCode contest"
* 输出:"s'teL ekat edoCteeL tsetnoc"
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
*/
public class TestTwo {
public String reverseWords(String s) {//太牛啦,这个切割字符串竟然忘记了
String[] strs = s.split(" ");
StringBuffer buffer = new StringBuffer();//利用String的变种StringBuffer,去实现切割字符串的翻转
for(int i = 0;i<strs.length;i++){
buffer.append(new StringBuffer(strs[i]).reverse());
if(i != strs.length-1){
buffer.append(" ");
}
}
return String.valueOf(buffer);
// int start = 0;
// int end = 0;
// String result = "";
// for(int i = 0;i<s.length();i++){
// if(s.charAt(i)==' '){
// end = i-1;
// result += reverse(s,start,end)+" ";
// start = i+1;
// }
// if(i == s.length()-1){
// end = i;
// result += reverse(s,start,end);
// }
// }
// return result;
}
private String reverse(String s,int start,int end){
String result = "";
for(int i = end;i>=start;i--){
result += String.valueOf(s.charAt(i));
}
return result;
}
public static void main(String[] args) {
TestTwo testTwo = new TestTwo();
System.out.println(testTwo.reverseWords("Let's take LeetCode contest"));
}
}
三、吃最多种类的糖果。
package double_point3;
import java.util.*;
/**
* Created with IntelliJ IDEA.
*
* @author : Future master
* @version : 1.0
* @Project : Java算法联系
* @Package : double_point3
* @ClassName : TestThree.java
* @createTime : 2021/11/1 20:09
* @Email : 2467636181@qq.com
* Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。
*
* 医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。
*
* 给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的最多种类数。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/distribute-candies
*/
public class TestThree {
public int distributeCandies(int[] candyType) {
Set<Integer> set = new HashSet<>();//巧妙利用set去存储所有的糖果类型
for(int v : candyType){
set.add(v);
}
if(candyType.length/2<set.size())return candyType.length/2;//如果所有的糖果类型比糖果一半的数量还要多那么直接返回糖果数量的一半
return set.size();//否则直接返回糖果的种类数量
}
}