移动零:
给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。
例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, 12, 0, 0]。
注意事项:
1.必须在原数组上操作,不要为一个新数组分配额外空间。
2尽量减少操作总数。
class Solution {
public void moveZeroes(int[] nums) {
int a=0;
for(int i=0;i
从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
注意事项:
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
例如:int[] nums={1,1,2} 返回2 原数组的前两个元素改为1,2
class Solution {
public int removeDuplicates(int[] nums) {
int a=1;
for(int i=1;inums[a-1]){
nums[a]=nums[i];
a=a+1;
}
}
return a;
}
}
两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
break;
}
}
}
return result;
}
}
旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的原地算法。
public void rotate(int[] nums, int k) {
if(nums.length==0||k<0){
return;
}
if(nums.length<=k){
k=k-nums.length;
}
int[] res=new int[nums.length];
for(int i=0;i
存在重复
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
public boolean containsDuplicate(int[] nums) {
if(nums.length<2){
return false;
}
Arrays.sort(nums);
for(int i=1;i
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
public int singleNumber(int[] nums) {
Arrays.sort(nums);
for(int i=0;i
//冒泡排序
Log.d("222初始", Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int valueBig = arr[i];
int valueSmall = arr[j];
arr[i] = valueSmall;
arr[j] = valueBig;
}
Log.d("222排序中", Arrays.toString(arr));
num=num+1;
}
}
Log.d("222排序的次数", num+"");
Log.d("222排序后", Arrays.toString(arr));
//二分法查找
Arrays.sort(arr);
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int middle = (start + end) / 2;
if (arr[middle] > 9) {
end = middle - 1;
} else if (arr[middle] < 9) {
start = middle + 1;
} else {
return;
}
}
以上题目均选自领扣网站!!
https://leetcode-cn.com