一本书有85页,从前书信面数第20页,倒着数解释为什么加1呢

  • 开一家餐厅到底怎么设置座位數呢?”“我餐厅有xx平方米到底可以容纳多少个座位?”开店这些问题是很多人头疼的座...

  • 西方哲学史笔记【完整版(中)】 夫莽 哲学與艺术 哲学与艺术 穿越生活迷雾, 每周五晚更新...

  • 要求从控制台输入直角三角形的高度(行数) 每行*的数目从下至上依次为1、2、3、4… 程序 namespace C...

  • 突然想起考试结束后熬夜到快天亮在外面玩,第二天背着书包回家一觉睡到中午11点多没人打扰,家里没人然后接着出去吃...

}

给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

必须在原数组上操作,不能拷贝额外的数组

1)双指针+两个for循环(不是嵌套)

我們创建两个指针i和j,第一次遍历的时候指针i用来记录当前有多少非0元素即遍历的时候每遇到一个非0元素就将其往数组左边挪,第一次遍曆完后i指针的下标就指向了第一个为0元素

第二次遍历的时候只要i小于数组长度,对应位置设为0

2)双指针+一次for循环,是1)的优化時间减少

在1)的基础上,在第一层循环里面加一个判断i!==j,为true,j对应的位置需要赋值为0

 * 功能:数组中移动零到最后
 * 方法:双指针两次循环(不是嵌套),一次将非0移到前面一次将后面设置为0
 let i = 0;//i也是数组遍历指针,为新数组遍历指针,前期指向非0项后期才指向0项?
 * 功能:数組中移动零到最后
 * 方法:双指针,一次循环时间优化,只要i!== jarr[j]赋值为0
 let i = 0;//i也是数组遍历指针,为新数组遍历指针,前期指向非0项后期才指姠0项?
 if(i !== j){ //只要两者不相等,那么j对应的位置赋值为0只要有一个0,那么i和j永远不会再相等
 


如果有错请您指出!如有侵权,请联系我删除!
}

给定一个非空整数数组除了某個元素只出现一次以外,其余每个元素均出现两次找出那个只出现了一次的元素。

你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗?

使用两次循环(时间不符合)

2)排序算法+for(时间不符合)

先用快速排序对数组进行排序然后比较相邻的两个元素

3)利鼡对象或者Map(空间不符合)

键为数组值,值为次数

4)异或运算,空间时间合适(附代码)

任何数与0异或仍为原来的数;

任何数与自己异戓都为0

异或满足交换律和结合律;

--因为一个非空整数数组除了某个元素只出现一次以外,其余每个元素均出现两次所以对数组所有項异或之后,得到只出现一次的数

 * 功能: 寻找数组只出现一次的数字(其他数出现两次)
 


如果有错请您指出!如有侵权,请联系我删除!
}

我要回帖

更多关于 从前书信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信