1.给你一个 升序排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组。元素的 相对顺序 应该保持 一致 。
public int[] removeDuplicates(int[] A) {
//边界条件判断
if (A == null || A.length == 0)
return null;
int left = 0;
// 遇到左指针和右指针指向值不相同的将左指针右移一位,使之用不同的值覆盖掉原来相同的值
for (int right = 1; right < A.length; right++)
if (A[left] != A[right]){
A[++left] = A[right];
}
return Arrays.copyOfRange(A,0,left+1);
}
或者直接用无序set进行排序
public int[] a(int[] A){
Set<Integer> set = new HashSet();
if (A == null || A.length == 0)
return null;
for (int i = 0; i < A.length; i++) {
set.add(A[i]);
}
/*
*把set转化为int[]
*/
Integer[] result = set.toArray(new Integer[]{});
return Arrays.stream(result).mapToInt(Integer::valueOf).toArray();
}
2。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回你能获得的 最大 利润 。
public int maxProfit(int[] prices) {
if (prices == null || prices.length < 2){
return 0;
}
int result = 0;
for (int i = 0; i < prices.length-1; i++) {
result += Math.max(prices[i+1]-prices[i],0);
}
return result;
}
3.旋转数组
给你一个数组,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
public void rotate(int[] nums, int k) {
int length = nums.length;
k %= length;
reverse(nums, 0, length - 1);//先反转全部的元素
reverse(nums, 0, k - 1);//在反转前k个元素
reverse(nums, k, length - 1);//接着反转剩余的
}
//把数组中从[start,end]之间的元素两两交换,也就是反转
public void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start++] = nums[end];
nums[end--] = temp;
}
}