2022-3-22 剑指offer day39
题1:
JZ57 和为S的两个数字
描述
输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。
数据范围:
0<=len(array)<=105
1<=array[i]<=106‘
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { 4 ArrayList<Integer> res=new ArrayList<Integer>(); 5 int l=0,r=array.length-1; 6 while (l<r) { 7 int s=array[l]+array[r]; 8 if (s==sum) { 9 res.add(array[l]); 10 res.add(array[r]); 11 break; 12 }else if (s<sum){ 13 l++; 14 }else r--; 15 } 16 return res; 17 } 18 }
思路:双指针。
题2:
JZ58 左旋转字符串
描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc” 。是不是很简单?OK,搞定它!
数据范围:输入的字符串长度满足 0 \le len \le 100 \0≤len≤100 , 0 \le n \le 100 \0≤n≤100
进阶:空间复杂度 O(n)\O(n) ,时间复杂度 O(n)\O(n)
1 public class Solution { 2 public String LeftRotateString(String str,int n) { 3 int len=str.length(); 4 if (len==0) return str; 5 n%=len; 6 return str.substring(n)+str.substring(0,n); 7 } 8 }
思路:左右拼接。
浙公网安备 33010602011771号