leetcode-Can Place Flowers
来源:互联网 发布:hd网络是什么意思啊 编辑:程序博客网 时间:2024/06/05 00:52
什么时候才能做到徒手bug free…
插入n个1,不能存在任意两个连续的1。
第一反应就是遍历一遍然后判断满足 nums[i] == 0 && nums[i-1]!=1 && nums[i+1]!=1 这样的条件的i,将该nums[i]赋值为1。但是首尾会出现数组访问越界的问题。由于题目没有说对空间的要求。。故考虑copy一个数组,将原数组首尾各添加一个0(不影响操作),然后遍历1-flowerbedSize即可:
bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) { int * tmpArr = (int *)malloc(sizeof(int)*(flowerbedSize+2)); if(!tmpArr)return; tmpArr[0] = 0; tmpArr[flowerbedSize+1] = 0; for(int i=1;i<flowerbedSize+1;i++) tmpArr[i] = flowerbed[i-1]; for(int i=1;i<flowerbedSize+1;i++) { if(tmpArr[i]==0 && tmpArr[i-1]!=1 && tmpArr[i+1]!=1) { tmpArr[i] = 1; n--; } } free(tmpArr); return (n>0)?false:true;}
空间复杂度O(N)看着还是不爽。。改进一下,总之原则就是处理好首尾两个即可:
bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) { int prev = 0,next = 0; for(int i=0;i<flowerbedSize;i++) { /*类似于前面copy数组将首尾赋值0*/ prev = (i==0)?0:flowerbed[i-1]; next = (i==flowerbedSize-1)?0:flowerbed[i+1]; if(flowerbed[i]==0 && prev!=1 && next!=1) { flowerbed[i] = 1; n--; } } return (n>0)?false:true;}
代码还是要写好看呀~
阅读全文
0 0
- leetcode[Can Place Flowers]
- leetcode-Can Place Flowers
- leetCode-Can Place Flowers
- LeetCode Can Place Flowers
- [leetcode]605. Can Place Flowers
- [LeetCode]605. Can Place Flowers
- [LeetCode]605. Can Place Flowers
- LeetCode 605.Can Place Flowers
- [leetcode]: 605. Can Place Flowers
- LeetCode 605 : Can Place Flowers
- [LeetCode] 605. Can Place Flowers
- LeetCode: 605. Can Place Flowers
- leetcode 605. Can Place Flowers
- LeetCode 605. Can Place Flowers
- LeetCode 605. Can Place Flowers
- Leetcode 605 Can Place Flowers
- LeetCode-605. Can Place Flowers
- leetcode 605. Can Place Flowers
- 算法——归并排序
- String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
- Android Studio删除行快捷键
- poj 2763 Housewife Wind
- Win10 一些常用快捷键
- leetcode-Can Place Flowers
- NGUI2D3D屏幕适应
- hbase 将查询结果写入文件
- 数字再排序数组中出现的次数
- lua基础知识整理
- 计算机启动相关术语、问题
- POJ 3069 Saruman's Army
- 第三周项目三C/C++求集合并集
- 题4