JZ3 数组中重复的数字
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @return int整型
*/
func duplicate( numbers []int ) int {
// write code here
n := len(numbers)
if n < 2 {
return -1
}
m := make(map[int]bool)
for _,v := range numbers {
if m[v] {
return v
}
m[v] = true
}
return -1
}
这道题比较简单,只用输出一个重复的元素即可,最开始的思路是排序,排序之后在遍历一遍找到第一个重复元素退出即可。
看题解用的map,发现优化了不少,不用排序,节省了时间。
JZ4 二维数组中查找
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param target int整型
* @param array int整型二维数组
* @return bool布尔型
*/
func Find( target int , array [][]int ) bool {
// write code here
x := len(array)
y := len(array[0])
for i,j := 0, y-1; i < x && j >= 0; {
//比target大的都在它下面
if target > array[i][j] {
i ++
continue
}
if target < array[i][j] {
j --
continue
}
if target == array[i][j] {
return true
}
}
return false
}
这道题需要一点思维,不是暴力搜索能做出来的,经过推理得到一个结论,
在某一位置,这个位置的下边一定是比他大的,这个位置的左边一定是比他小的,每次和target进行比较,在动态的改变位置,最后当出了边界还未找到的话就是没有,返回false,找到则输出true。
JZ5 替换空格
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
func replaceSpace( s string ) string {
// write code here
var str string
for i := 0; i < len(s); i ++ {
if s[i] != ' ' {
str += s[i:i+1]
}else {
str += "%20"
}
}
return str
}
很简单,不解释
JZ6 从尾到头打印链表
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param head ListNode类
* @return int整型一维数组
*/
func printListFromTailToHead( head *ListNode ) []int {
// write code here
n := 0
for p := head; p != nil; p = p.Next {
n ++
}
m := make([]int,n)
for head != nil {
m[n-1] = head.Val
head = head.Next
n --
}
return m
}
这题也好理解