leetcode_60题目的变形
http://blog.sina.com.cn/s/blog_672f71fc0101pgf6.html
这次,array允许重复的。我适当改了下代码判断的情况。
仍然是o(logn)
class Solution {
public:
bool searchStep(int A[],int target,int left,int right)
{
if(left > right)
return false;
int……
给定一个sorted 的array但是 需要做个调转:比如: 0 1 2 3 4 5 6 7 8 9 某个调转之后:7 8 9 0 1 2 3 4 5 6
输入target,如果array中存在target返回下标,否则,返回-1。
欧克,傻瓜都能想到o(n)的方法,
有没有更快的?o(logn)?二分?二分查找变形一下就行:
class Solution {
public:
int ans;
void searchSt……
简单搜索题,但是题目交代不是很清楚,也可能是自己的英文不大好,就是说给n,全集为1,2,3…n。从里面选k个组成子集,列举所有子集。
class Solution {
public:
void combineStep(int n,int step,int k,vector<int>&item,vector<vector<int>>&ans,int count)
{
if(step &……
判断一个链表中是否有环,并且输出进入环中的节点。如果没有,输出NULL。
判断一个链表是否成环,且不开辟额外的空间,在之前的博客中一提到:
http://blog.sina.com.cn/s/blog_672f71fc0101odsf.html
如何输出环中节点的入口节点?
如果能计算出环中节点个数k,再根据从后向前删除节点的思路:
http://blog.sina.com.cn/……
给一个单向链表,输入一个n,删掉从后往前第n个元素。尽可能一次遍历单链表。
两个指针,使他们的差距刚好为n,当后面一个刚好指向NULL的时候,删掉前一个即可。
附上代码:
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode *before = NULL;
ListNode *p1 =……
模拟题,但是做起来好费劲啊。
一次AC:
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(n == 0)
return n;
int now;
int count = 0;
int len = n;
for(int i = 0;i < len;i++)
{
if(count == 0 || now != A[……
给一个mn矩阵,将该矩阵中出现0元素的位置的行列均置为0。
最简单的方法,开一个mn的矩阵记录,再设置就行了。
更简单的是:开一个m+n的矩阵记录行列就可以了。
更更简单的常数空间的方法,我想了一种,有点问题,正在琢磨,先把m+n的解法贴出来吧。
一次AC。
附上代码:
class Solution {
public:
void set……
这个题因为原链接的图片挂了,不过根据题意,题意是:给一个m*n的矩阵,问有多少条路径可以从(0,0)点到(m-1,n-1)点。
走路的规则是 一步只能从当前点往右或者往下走。
宽度优先搜索。
附上代码:
一次AC。目测代码性能还是不够好。
struct PPoint
{
int x;
int y;
};
class Solution {
public:
bool C……
将一个n*n的矩阵顺时针旋转90度,额外地,能不能原地旋转,就是不开辟额外的空间。
一次AC,每个位置上的旋转只会影响4个位置上的数组,开一个tmp,搞定。
附上代码:
class Solution {
public:
void MoveStep(vector<vector<int>> &matrix,int i,int j,int n)
{
in……
给出n个数,里面每个数字重复3次,只有一个数字只出现一次,求该数字[线性时间和空间]
相信两个数的大家都会,异或就行。
其实最开始用mapA过,觉得不符合题意,看了别人的思路,知道了,其实就是题目的变形,感觉不会举一反三,而且对问题的分析能力不够。
异或的目的就是计数每个位置出现1的个数,如果有两次就清零。
……