一、轮转数组
方法一:通过每一轮向后移动一位,k轮之后就可以得到结果(时间超出限制)
class Solution {
public void rotate(int[] nums, int k) {
int n=nums.length;
for(int i=0;i<k;i++){
int num=nums[n-1];
for(int j=n-1;j>0;j--){
nums[j]=nums[j-1];
}
nums[0]=num;
}
}
}
方法二:通过额外的数组保存结果(通过)
class Solution {
public void rotate(int[] nums, int k) {
int n=nums.length;
if(n==1)return;
k=k%n;
int[]arr=new int[n];
int j=0;
for(int i=n-k;i<n;i++){
arr[j++]=nums[i];
}
for(int i=0;i<n-k;i++){
arr[j++]=nums[i];
}
System.arraycopy(arr,0,nums,0,n);
}
}
方法三:翻转数组
class Solution {
public void rotate(int[] nums, int k) {
k%=nums.length;
reverse(nums,0,nums.length-1);
reverse(nums,0,k-1);
reverse(nums,k,nums.length-1);
}
public void reverse(int[] nums,int start,int end){
while(start<end){
int temp = nums[start];
nums[start]=nums[end];
nums[end]=temp;
start++;
end--;
}
}
}
二、买股票的最佳时机Ⅰ
方法:记录遍历过的最小值,将当前的价格与最小值相减,记录差值最大的是答案。
class Solution {
public int maxProfit(int[] prices) {
int n=prices.length;
int minPrice=prices[0];
int ans=0;
for(int i=1;i<n;i++){
int num=prices[i]-minPrice;
if(num>ans)ans=num;
if(prices[i]<minPrice)minPrice=prices[i];
}
return ans;
}
}
三、买股票的最佳时机Ⅱ
方法:贪心算法。将差值为整数的都加起来。
class Solution {
public int maxProfit(int[] prices) {
int n=prices.length;
int ans=0;
for (int i=1;i<n;i++){
if(prices[i]>prices[i-1]){
ans+=prices[i]-prices[i-1];
}
}
return ans;
}
}
四、跳跃游戏
方法:在当前下标,计算可以到达的最远位置,若大于数组长度就可以到达,否则不能。
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length;
int d=0;
for(int i=0;i<n;i++){
if(d>=i){
d=Math.max(d,i+nums[i]);
if(d>=n-1)return true;
}
}
return false;
}
}