文章目录
一、翻转单词顺序
1.1题目
示例1:
示例2:
示例3:
1.2代码
思路:利用trim()函数去掉首尾空格,substring()拦截器,StringBuilder拼接字符串
class Solution {
    public String reverseWords(String s) {
        s=s.trim();
        int j=s.length()-1,i=j;
        StringBuilder sb=new StringBuilder();
        while(i>=0){
            while(i>=0&&(s.charAt(i)!=' '))i--;
            sb.append(s.substring(i+1,j+1)+' ');
            while(i>=0&&(s.charAt(i)==' '))i--;
            j=i;
        }
        return sb.toString().trim();
    }
}
二、和为s的连续正数序列
2.1题目
示例1:
示例 2:
2.2代码
思路1:
这个题面试官肯定会让你尝试新的解法
思路2:

class Solution {
    public int[][] findContinuousSequence(int target) {
        int i=1,j=2,s=3;
        List<int[]> list=new ArrayList<>();
        while(i<j){
            if(s==target){
                int a[]=new int[j-i+1];
                for(int k=i;k<=j;k++){
                    a[k-i]=k;
                   
                }
                 list.add(a);
                
            }
            if(s>=target){
                s=s-i;
                i++;
            }
            else{
                j++;
                s=s+j;
            }
            
        }
        return list.toArray(new int [0][]);
    }
}
三、第一个只出现一次的字符
3.1题目
示例 1:
示例 2:
3.2代码
方案一
 可用HashMap key唯一的关键
class Solution {
    public char firstUniqChar(String s) {
        char a=' ';
        if(s.length()==0||s==null) return a;
        HashMap<Character,Integer> map=new HashMap<>();
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(map.containsKey(c)){
                map.put(c,map.get(c)+1);
            }else map.put(c,1);
        }
        for(int i=0;i<s.length();i++){
            if(map.get(s.charAt(i))==1){
                return s.charAt(i);
            }
        }
        return a;
    }
}
方案二
 因为只存储26个英文字母的小写 可以利用数组来存储
 例如 a[0]=1,a[1]=0,表示第一个字母出现1次 第二个字母出现0次
class Solution {
    public char firstUniqChar(String s) {
        if(s == null || s.length() == 0) return ' ';
        int[] count = new int['z' - 'a' + 1];  //因为s只包含了小写字母
        for(int i = 0;i < s.length();i++){
            count[s.charAt(i) - 'a'] ++;
        }
        for(int i = 0;i < s.length();i++){
            if(count[s.charAt(i) - 'a'] == 1)
                return s.charAt(i);
        }
        return ' ';
    }
}
四、圆圈中最后剩下的数字(约瑟夫环)
4.1题目
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
示例 1:
示例 2:
4.2代码
这个题重要的思路得对 像我就想了半天没有想出来!!!需要用到动态规划的知识
 
 
 
 代码:
class Solution {
    public int lastRemaining(int n, int m) {
        int ans=0;
        for(int i=2;i<=n;i++){
            ans=(ans+m)%i;
            
        }
        return ans;
    }
}










