给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标
public class SumOne { //第一种方式 public int[] plusOne(int[] digits){ for (int i = digits.length-1; i >=0; i--) { if(digits[i]>=0 && digits[i]<10 && digits[i] != 9){ digits[i]++; return digits; } digits[i]=0; } //跳出for循环,说明数字全部是9 int[] temp=new int[digits.length+1]; temp[0] = 1; return temp; } //第二种方式:模拟加法 public int[] plusOne1(int[] digits){ //存储进位 int carry = 1; //从后往前开始遍历 for (int i = digits.length-1; i>= 0; i--) { int v = digits[i] + carry; //判断是否需要进位 if(v == 10){ digits[i] = 0; carry = 1; } else { digits[i] = v; carry = 0; //本题固定加1,再往前计算不会有进位了,所以这里可以break出去了 break; } } if(carry == 0){ return digits; } //说明数组中全是9,处理最高位进1的情况 int[] temp = new int[digits.length+1]; temp[0] = 1; return temp; } }
两个栈实现一个队列
public class TwoStackToQueue<E> { private Stack<E> stack1=new Stack<>(); private Stack<E> stack2=new Stack<>(); //入队 public void offer(E value){ stack1.push(value); } //出队 /** * 思路:1.入队列的时候只往stack1添加元素就行 * 2.出队列的时候先判断stack2是否为空,stack2中的元素都是先进来的,先进先出 * 如果stack2不为空,则直接弹出stack2的栈顶元素。如果为空,则将stack1的元素添加到stack2中,然后弹出stack2的栈顶元素 */ public E poll(){ //先进行判断,如果两个栈都为空,那么代表队列中没有元素 if(stack1.isEmpty() && stack2.isEmpty()){ return null; } if(stack2.isEmpty()){ while (!stack1.isEmpty()){ stack2.push(stack1.pop()); } } E value = stack2.pop(); return value; } //判断队列是否为空 public boolean empty(){ //只有两个栈同时为空的时候队列才为空 if(stack1.isEmpty() && stack2.isEmpty()){ return true; } return false; } public static void main(String[] args) { TwoStackToQueue twoStackToQueue=new TwoStackToQueue(); for (int i = 0; i < 6; i++) { int data =(int) (Math.random()*100+1); System.out.print(data+" "); twoStackToQueue.offer(data); } System.out.println(); System.out.println("出队"); while (!twoStackToQueue.empty()){ System.out.print(twoStackToQueue.poll()+" "); } } }
两个队列实现一个栈
/** * @author wcc * @date 2021/10/21 10:34 * 两个队列实现一个栈 * 1.定义两个队列queue1和queue2 * 2.出栈的时候先判断queue1是否为空,因为queue1中的元素总是后进来的,后进先出,除了队列的最后一个元素 * 将其他元素添加到queue2,queue1的最后一个元素出队 * 3.出栈的时候如果再2中判断queue1为空,除了queue2的最后一个元素,将queue2中其他元素添加到queue1 * 然后queue2中的最后一个元素出队 */ public class TwoQueueToStack<E> { private Queue<E> queue1 = new LinkedList<>(); private Queue<E> queue2 = new LinkedList<>(); //入栈 public void push(E e){ queue1.add(e); } //出栈 public E pop(){ if(queue1.isEmpty() && queue2.isEmpty()){ return null; } //先判断queue1是否为空 if(!queue1.isEmpty()){ //如果不为空 //将queue1队列中的元素放入queue2中,queue1中只留下一个元素 for (int i = 0; i < size()-1; i++) { queue2.add(queue1.poll()); } //之后再将queue2中的数据再次放回queue队列中 for (int i = 0; i < size()-1; i++) { queue1.add(queue2.poll()); } return queue1.poll(); } return null; } public int size(){ return queue1.size()+queue2.size(); } public boolean empty(){ if(queue1.size()==0){ return true; } return false; } public static void main(String[] args) { TwoQueueToStack<Object> objectTwoQueueToStack = new TwoQueueToStack<>(); for (int i = 0; i < 6; i++) { int data =(int) (Math.random()*100+1); System.out.print(data+" "); objectTwoQueueToStack.push(data); } System.out.println(); System.out.println("出栈"); while (!objectTwoQueueToStack.empty()){ System.out.print(objectTwoQueueToStack.pop()+" "); } } }