今天主要是对前两天的引用,
一道题是在一个数组中将不是0的数提前,0放到数组末尾,尽量在原数组上进行操作
解题思路是直接遍历将所有的非零数移动,改下标
代码实现
var moveZeroes = function(nums) {
var indexNum= 0
var NowIndex = 0
//把不为零的补到前面去,后面直接加0
while(indexNum<nums.length){
if(nums[indexNum]!=0){
nums[NowIndex++] = nums[indexNum]
}
indexNum++
}
for(var i=NowIndex;i<nums.length;i++){
nums[i] = 0
}
return nums
};
挺简单的,但是这样效率不是很高
还有一道题是在数组中找出两个数相加与目标值相等,返回代表下标的数组
我一开始通过的算法就是暴力解法,思想比较简单,但是效率不高
var twoSum = function(numbers, target) {
var answer = []
for(var i=0;i<numbers.length-1;i++){
var flag = target-numbers[i]
for(var j=i+1;j<numbers.length;j++)
{
if(numbers[j]==flag){
answer.push(i+1)
answer.push(j+1)
return answer
}
}
}
};
但是优化后使用二分查找,效率会提高很多,代码实例
for (int i = 0; i < numbers.length; ++i) {
int low = i + 1, high = numbers.length - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
if (numbers[mid] == target - numbers[i]) {
return new int[]{i + 1, mid + 1};
} else if (numbers[mid] > target - numbers[i]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
return new int[]{-1, -1};