class Solution {
public String toHex(int num) {
if(num==0){
return "0";
}
StringBuffer res = new StringBuffer();
while(num!=0) {
int temp = num & 15;
char resTemp = (char)(temp+'0');
if(temp>=10){
resTemp = (char)(temp-10+'a');
}
res.append(resTemp);
num >>>= 4;
}
return res.reverse().toString();
}
}
414第三大的数
class Solution {
public int thirdMax(int[] nums) {
Arrays.sort(nums);
int len=nums.length;
int flag=0;
for(int i=len-1;i>0;i--){
if(nums[i]!=nums[i-1]){
flag++;
}
if(flag==2 ){
return nums[i-1];
}
}
return nums[len-1];
}
}
747.至少是其他数字两倍的最大值
class Solution {
public int dominantIndex(int[] nums) {
int len=nums.length;
if(len==1){
return 0;
}
int max=nums[0];
int index=0;
int max2=nums[0];
for(int i=1;i<len;i++){
if(nums[i]>max){
max2=max;
max=nums[i];
index=i;
}
else{if(max==max2||nums[i]>max2){
max2=nums[i];}
}
}
if(max>=2*max2){
return index;
}
return-1;
}
}
334.递增的三元子序列
class Solution {
public boolean increasingTriplet(int[] nums) {
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
if (set.size() < 3) {
return false;
}
for (int i = 0; i < nums.length - 2; i++) {
for (int j = i + 1; j < nums.length - 1; j++) {
if (nums[j] > nums[i]) {
for (int k = j + 1; k < nums.length; k++) {
if (nums[k] > nums[j]) {
return true;
}
}
}
}
}
return false;
}
}
46全排列
class Solution {
boolean[] vis = new boolean[6];
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
dfs(0,nums,new ArrayList<Integer>());
return res;
}
public void dfs(int count,int[] nums,List<Integer> list){
if(count==nums.length){
res.add(new ArrayList<Integer>(list));
return;
}
for(int i=0;i<nums.length;i++){
if(!vis[i]){
vis[i] = true;
list.add(nums[i]);
dfs(count+1,nums,list);
list.remove(list.size()-1);
vis[i] = false;
}
}
}
}
1208 尽可能使字符串相等
class Solution {
public int equalSubstring(String s, String t, int maxCost) {
ArrayList<Integer> list = new ArrayList<>();
int lenMax = 0;
for(int i=0;i<s.length();i++){
if(Math.abs(s.charAt(i)-t.charAt(i)) > maxCost && list.size()==0){
continue;
}
if(Math.abs(s.charAt(i)-t.charAt(i)) > maxCost){
lenMax = Math.max(lenMax,list.size());
maxCost+=Math.abs(s.charAt(list.get((int)0))-t.charAt(list.get((int)0)));
list.remove((int)0);
i--;
}
else{
maxCost-=Math.abs(s.charAt(i)-t.charAt(i));
list.add(i);
}
}
lenMax = Math.max(lenMax,list.size());
return lenMax;
}
}
6.Z字形变换
class Solution {
public String convert(String s, int numRows) {
if(numRows==1){
return s;}
StringBuffer buffer = new StringBuffer();
int n1=2*numRows-2;
int n2=s.length();
for(int j=0;j<numRows;j++)
for(int i=0;i<n2;i++){
if(i%n1==j||i%n1==n1-j){
buffer.append(s.charAt(i));
}
}
return buffer.toString();
}
}
2109.向字符串添加空格
class Solution {
public String addSpaces(String s, int[] spaces) {
StringBuffer sb = new StringBuffer();
int a=0;
for(int i=0;i<s.length();i++){
if(a<spaces.length&&i==spaces[a]){
sb.append(" ");
a++;
}
sb.append(s.charAt(i));
}
return sb.toString();
}
}
力扣168Excel列表名称
一开始用String但是严重超时占用内存也非常严重,状况非常惨烈,
之后改成StringBuffer代码如下
class Solution {
public String convertToTitle(int columnNumber) {
StringBuffer stringBuffer = new StringBuffer();
while (columnNumber>0){
columnNumber--;
stringBuffer.append((char)(columnNumber%26+(int)'A'));
columnNumber/=26;
}
StringBuffer reverse = stringBuffer.reverse();
return reverse.toString();
}
}
力扣680 验证回文字符串
思路:运用了双指针查找的思想,头尾相互比较,一个在前一个在后,一个一个的查找是否对应相等,但这题多了一个考虑,就是因为他可以改一个字符,加入贪心的思想,一旦遇到头尾不同时,
将此时的两个下标记下来,然后任改一个,继续查找,看改过后是否能形成回文,能则成功了,不能则返回到原先的状态,改另外一边,改了后形成回文的话,也成功了,如果两个状态都不行,则代表不是删除一个字符就能形成回文,所以返回false,也可能遇不到头尾不同,则直接成功。
class Solution {
public boolean validPalindrome(String s) {
int flag=0;
int r=0,l=0;
int n=s.length();
int left=0,right=n-1;
while(left<right){
if(s.charAt(left)!=s.charAt(right)){
if(flag==0){
r= right;
l=left;
right--;
flag=1;
continue;
}
else if(flag==1){
right=r;
left=l;
++left;
flag=2;
continue;}
else{
return false;
}
}
--right;
++left;
}
return true;
}
}
力扣495.提莫攻击
class Solution {
public int findPoisonedDuration(int[] timeSeries, int duration) {
int time=0;
for(int i=0;i<timeSeries.length-1;i++){
if(timeSeries[i+1]<=timeSeries[i]+ duration-1){
time+= timeSeries[i+1]-timeSeries[i];
}
else time+= duration;
}
return time+= duration;
}
}