系列文章目录
一
1.反转字符串
C
char* solve(char* str ) {
// write code here
char *f, *r;
char temp;
f = r = str;
if(*str == ' ')
return str;
while(*r != '\0')
r++;
r--;
while(r - f > 0){
temp = *r;
*r = *f;
*f = temp;
f++;
r--;
}
return str;
}
java
import java.util.*;
public class Solution {
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
public String solve (String str) {
// write code here
int j = 0;
char[] s2 = new char[str.length()];
for(int i = 0; i < str.length(); i++){
s2[j++] = str.charAt(str.length()-1-i);
}
return new String(s2);
}
}
2.最大公约数
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求出a、b的最大公约数。
* @param a int
* @param b int
* @return int
*/
public int gcd (int a, int b) {
// write code here
int t;
if(a < b)
{
t = a;
a = b;
b = t;
}
while(b > 0){
t = a % b;
a = b;
b = t;
}
return a;
}
}
3.反转链表
public class Solution {
public ListNode ReverseList(ListNode head)
{
public class Solution {
public ListNode ReverseList(ListNode head)
{
ListNode pre = null;
ListNode next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}
4.两数之和
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起)
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
例如:
给出的数组为 [20, 70, 110, 150] , 目标值为90
返回一个数组 [1,2] ,因为 numbers _1+numbers _2=20+70=90
踩到一个小坑
//错误代码
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
int i, j;
int a[2];
int flag = 0;
for( i = 0; i < numbersLen - 1; i++)
{
for( j = i + 1; j < numbersLen; j++)
{
if(target - numbers[i] - numbers[j] == 0)
{
a[0] = i+1;
a[1] = j+1;
flag = 1;
break;
}
}
if(flag == 1)
break;
}
*returnSize = 2; //问题函数里面定义的的数组,如果要返回这个数组的指针,那么我在main里面调用这个指针会是空吗
return a;
}
————————————————————————————————
【error】这里返回的指针指向的是在函数内定义的数组,函数结束这个数组的生命周期就结束了,所以指针就有问题了。
—————————————————————————————————
//正确
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
int i, j;
int a[2];
int flag = 0;
for( i = 0; i < numbersLen - 1; i++)
{
for( j = i + 1; j < numbersLen; j++)
{
if(target - numbers[i] - numbers[j] == 0)
{
a[0] = i+1;
a[1] = j+1;
flag = 1;
break;
}
}
if(flag == 1)
break;
}
*returnSize = 2; //问题函数里面定义的的数组,如果要返回这个数组的指针,那么我在main里面调用这个指针会是空吗
numbers[0] = a[0];
numbers[1] = a[1];
return numbers;
}
————————————————————————————
success
发现传过来的指向数组的指针可用,拿来吧你。