#26 Remove Duplicates from Sorted Array

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,

Given input array nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
It doesn't matter what you leave beyond the new length.

------这个题提交了好几次才AC,主要是函数不仅要返回不反复数的个数count。还要求将不反复的数放置在原始数组的前count个位置。阅读理解非常重要啊。

int removeDuplicates(int* nums, int numsSize) {
int count=1;//14ms
int i;
if(numsSize==0)
return 0;
if(numsSize==1)
return 1;
for(i=1;i<=numsSize-1;i++)
{
if(nums[i]!=nums[i-1])
{
nums[count] = nums[i];//不仅要求出不反复个数,还要将不反复元素放在前面
count++;
}
}
return count;
}

#27 Remove Element

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

从数组中去除指定元素。返回剩余元素个数count。-------同一时候,原来数组中前count个元素即为原来数组的剩余元素。否则不会AC。

写了2种方法,法一时间复杂度和空间复杂度都比較高,但便于理解。法二使用了双指针,i和count分别指向原来的元素和非指定删除值的元素

//0ms
int removeElement(int* nums, int numsSize, int val) {
<span style="white-space:pre"> </span>int i,j = 0,count = 0;
int *a;
a = (int *)malloc(sizeof(int)*numsSize);
for(i=0; i < numsSize; i++)
{
if(nums[i] == val)
count++;
else
a[j++]=nums[i]; }
for(i=0; i < j; i++)
nums[i] = a[i];
return numsSize-count;
}
//0ms
int removeElement(int* nums, int numsSize, int val) {
<span style="white-space:pre"> </span>int i = 0,count = 0;
<span style="white-space:pre"> </span>while(i < numsSize)
{
if(nums[i] == val)
i++;
else
nums[count++] = nums[i++];
}
return count;
}

#28 Implement strStr()

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

经典的串的模式匹配问题,主要有BF和KMP算法,详细解析可见本博客相关博客《串模式匹配之BF和KMP算法》

//BF
int strStr(char* haystack, char* needle) {
int i=0,j=0,k;
int len1 = strlen(haystack);
int len2 = strlen(needle);
if(len2==0)
return 0;
if(len1==0&&len2!=0)
return -1; while( i<len1 && j<len2)
{
if(haystack[i]==needle[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=len2)
k=i-len2;
else
k=-1;
return k;
}

#36 Valid Sudoku

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

A partially filled sudoku which is valid.

推断给定数独是否是一个有效数独:仅仅考虑没有反复数字。最直观的解法是推断每一列,每一行。每个3*3的方块内不包括反复的数字

直接贴代码

bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {
int hash[10];
int i,j,k,m,n;
char small[3][3];
memset(hash,0,sizeof(hash));
if(boardRowSize%3 != 0 || boardColSize%3 != 0)
return false;
for(i=0; i < boardRowSize; i++)
for(j=0;j<boardColSize;j++)
{
if(board[i][j] == '.'||(board[i][j] <= '9' && board[i][j] >= '1'))
continue;
else
return false;
}
for(i = 0; i < boardRowSize; i++)
{
memset(hash,0,sizeof(hash));
for(j = 0; j < boardColSize; j++)
if(board[i][j] != '.')
hash[board[i][j] - '0']++; for(k = 1;k < 10;k++)
if(hash[k] > 1)
return false;
}
for(j = 0; j < boardColSize; j++)
{
memset(hash,0,sizeof(hash));
for(i = 0; i < boardRowSize; i++)
if(board[i][j] != '.')
hash[board[i][j] - '0']++; for(k = 1; k < 10; k++)
if(hash[k] > 1)
return false;
}
memset(hash,0,sizeof(hash)); for(i = 0; i < boardRowSize; i = i+3)
for(j = 0; j < boardColSize; j = j+3)
{ small[0][0] = board[i][j];
small[0][1] = board[i][j+1];
small[0][2] = board[i][j+2];
small[1][0] = board[i+1][j];
small[1][1] = board[i+1][j+1];
small[1][2] = board[i+1][j+2];
small[2][0] = board[i+2][j];
small[2][1] = board[i+2][j+1];
small[2][2] = board[i+2][j+2];
for(m=0; m < 3; m++)
for(n = 0; n < 3; n++)
{
if(small[m][n] != '.')
hash[small[m][n] - '0']++;
} for(k=1; k < 10; k++)
if(hash[k] > 1)
return false;
memset(hash,0,sizeof(hash));
}
return true;
}

简化后例如以下:

bool isParticallyValid(char** board,int x1,int y1,int x2,int y2)
{
int hash[10],i,j;
memset(hash,0,sizeof(hash));
for(i = x1; i <= x2; i++)
{
for(j = y1; j <= y2; j++)
{
if(board[i][j] != '.')
{
hash[board[i][j]-'0']++;
if(hash[board[i][j]-'0'] > 1)
return false;
}
}
}
return true;
}
bool isValidSudoku(char** board, int boardRowSize, int boardColSize)
{
int i,j;
//判定每一行每一列是否包括反复元素
for(i = 0; i < 9; i++)
{
if(!isParticallyValid(board,i,0,i,8))
return false;
if(!isParticallyValid(board,0,i,8,i))
return false;
}
//判定3*3的方块内是否包括反复元素
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(!isParticallyValid(board,i*3,j*3,i*3+2,j*3+2))
return false;
}
}
return true;
}

Leetcode--easy系列3的更多相关文章

  1. hdu 2049 不easy系列之(4)——考新郎

    不easy系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. LeetCode——single-number系列

    LeetCode--single-number系列 Question 1 Given an array of integers, every element appears twice except ...

  3. HDU 2045不easy系列之三LELE的RPG难题(趋向于DP的递推)

    不easy系列之(3)-- LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  4. hdu1465不easy系列之中的一个(错排)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/37512659 转载请注明出 ...

  5. Leetcode算法系列(链表)之删除链表倒数第N个节点

    Leetcode算法系列(链表)之删除链表倒数第N个节点 难度:中等给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4-&g ...

  6. Leetcode算法系列(链表)之两数相加

    Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...

  7. leetcode easy problem set

     *勿以浮沙筑高台* 持续更新........     题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...

  8. [Leetcode] Sum 系列

    Sum 系列题解 Two Sum题解 题目来源:https://leetcode.com/problems/two-sum/description/ Description Given an arra ...

  9. LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]

    题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...

  10. 决战Leetcode: easy part(51-96)

    本博客是个人原创的针对leetcode上的problem的解法,所有solution都基本通过了leetcode的官方Judging,个别未通过的例外情况会在相应部分作特别说明. 欢迎互相交流! em ...

随机推荐

  1. 洛谷 P1177 【模板】快速排序 【快速排序/multiset排序】

    题目描述 利用快速排序算法将读入的N个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.(C++选手请不要试图使用STL ...

  2. ZOJ 3332 Strange Country II (竞赛图构造哈密顿通路)

    链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3332 本文链接:http://www.cnblogs.com/Ash-l ...

  3. hdu6156

    hdu6156 题意 求 \([2, 36]\) 进制下,给定区间内的数是回文数的个数.每存在一个回文数,答案加上该回文数的进制. 分析 10进制下回文数是 数位DP 很常见的问题,这道题只需要把在转 ...

  4. NGUI_Sprites

    一.UI Sprites 控件: Sprites控件是NGUI的基础控件,几乎可以这么说所有的控件都可以基于Sprites控件添加 Box Collider然后进行附加相关的脚本组件来达到想要的插件效 ...

  5. [Contest20180328]coin

    转化一下,相当于从$0$跳到$M$,每一步跳跃距离为$v_i$中的某个,每次跳跃距离不大于上一次,统计方案数 用$f_{i,j,k}$表示跳到$i$,第一步跳$v_j$,最后一步跳$\geq v_k$ ...

  6. 【贪心】bzoj3709 [PA2014]Bohater

    把怪分成两类看: 一.回血>损血 则若先杀损血少的再杀损血多的,则为当前这一步提供了更高的可能性.因为血量是单增的,所以尽量用较少的血量去干♂耗血较少的怪物. 二.回血<损血 则若先杀回血 ...

  7. 【斜率优化】BZOJ1010 [HNOI2008]玩具装箱toy

    [题目大意] P教授有编号为1...N的N件玩具,第i件玩具长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的.如果将第i件玩具到第j个玩具放到一 个容器中,那么容器的长度将为 x ...

  8. python3 Django框架报错(备忘录)

    这篇博客主要总结的学习Django框架中,遇到的报错如何去解决问题: 1.decimal.InvalidOperation: decimal.InvalidOperation: [<class ...

  9. 微信小程序退款【证书的使用】

    1,官方文档的地址 2,在官方文档中给出了证书使用的链接,如下: [其实只有证书的获取,选择.具体的证书怎么在代码中使用,文档中并没有给出说明] 3,第一步准备请求的参数,里面只有五个是参数是有点特殊 ...

  10. 一个页面如何放多个百度编辑器 Ueditor 1.4.3?PHP如何获取Ueditor 的值?

    问题1:一个页面如何放置多个Ueditor? 参考代码如下: <form  method="post" action="save.php"> < ...