算法

实现一个可以得到最小值的栈

这里首先要创建两个栈对象,其中一个正常进行栈的相关数据结构,第二个栈在push的时候需要与当前栈的栈顶元素进行比较,如果大于或者等于当前栈元素的话就重新push一个当前栈顶元素,这样可以保证第二个栈的栈顶元素是整个栈元素中最小的,即可求出最小值

判断当前字符串与另一个字符串是否为旋转词

假设有s1 = “1234” 那么他的旋转词为”2341”,”3421”,”4123”三种,这里大致分为三步
第一步:判断当前两个字符串是否相等.
第二步:s1 = s1+s1 即将两个小字符串拼接成一个大字符串.
第三步:判断大字符串中是否包含s2,如果包含则这两个字符串为旋转词,如果不包含则不是

将一个句子进行逆序输出

第一步:实现字符串逆序方法.
第二步:将整个句子进行逆序.
第三步:分别将每个单词再次进行逆序.

str=”ABCDE” i =2 将str调整为“DEABC“ 要求时间复杂度为O(N) 额外空间复杂度为O(1)

因为要求了额外空间复杂度O(1) 所以不能够创建辅助字符串进行调整,
1.在str中做(0,i)部分的调整,使之逆序.
2.再将str (i+1, n)部分进行逆序调整.
3.最后将str整体字符串进行逆序调整

给定一个字符串类型的数组strs 请找到一种拼接顺序,使得将所有字符串拼接起来的这个大字符串是所有可能性中字典顺序最小的并且返回这个大字符串

如果str1+str2


Arrays.sort(strs, new GComparator());
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; i++){
    sb.append(strs[i]);
}

public class GComparator implements Comparator<String> {
    public int compare(String o1, String o2) {
        return (o1+o2).compareTo(o2+o1);
    }
}

将一个字符中的所有空格替换成 “%30”

例如“a b c” 首先遍历str,发现空格的数量为2 ,所以需要增加2*3-2个位置,加上原先的5
共需要9个位置,然后将字符串依次从后向前拷贝到相应的位置上,例如c对应下标8的位置 例如“a b c” 首先遍历str,发现空格的数量为2 ,所以需要增加2*3-2个位置,加上原先的5
共需要9个位置,然后将字符串依次从后向前拷贝到相应的位置上,例如c对应下标8的位置

用一个栈实现栈元素逆序

首先实现取出栈底元素的方法,这里运用了递归方法来取出,然后还是运用递归来进行取出元素的逆序。

主要代码如下



    public void reverse(Stack<Integer> stack){
        if (stack.isEmpty()){
            return ;
        }
        int i = get(stack);
        reverse(stack);
        stack.push(i);

    }


    public int get(Stack<Integer> stack){
        int result = stack.pop();
        if (stack.isEmpty()){
            return result;
        } else {
            int last = get(stack);
            stack.push(result);
            return last;
        }

    }


}

双栈排序

这里需要有一个helpStack来进行辅助排序,首先将排序栈中的元素一个一个弹出,然后与helpStack栈中的栈顶元素进行比较,如果比栈顶元素小,那么就直接压入,如果比栈顶元素大,则将栈顶元素弹出,并且压入到排序栈中,一直这么比较循环,最后就可以得出顺序序列

private static void sortStack() {
        // TODO Auto-generated method stub
        while(!mBasicStack.isEmpty()){
            Integer result = mBasicStack.pop();
            startSort(result);
        }
        while(!mHelpStack.isEmpty()){
            Integer sorted = mHelpStack.pop();
            mBasicStack.push(sorted);
        }
        System.out.print(Arrays.deepToString(mBasicStack.toArray()));
    }

    private static void startSort(Integer result) {
        // TODO Auto-generated method stub
        if (mHelpStack.isEmpty() || result <= mHelpStack.peek()) {
            mHelpStack.push(result);
            System.out.print(Arrays.deepToString(mHelpStack.toArray()));
        } else if (!mHelpStack.isEmpty() && result > mHelpStack.peek()) {
            Integer bigger = mHelpStack.pop();
            mBasicStack.push(bigger);
            System.out.print(Arrays.deepToString(mBasicStack.toArray()));
            System.out.println();
            startSort(result);
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值