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 \0len100  , 0 \le n \le 100 \0n100 
进阶:空间复杂度 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 }

思路:左右拼接。

posted on 2022-03-22 12:00  阿ming  阅读(19)  评论(0)    收藏  举报

导航